0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

大人向け。数列 n^3+5 が6の倍数であることの証明「倍数を示す問題2 の前半のみ」様を、証明はsympyで。

0
Last updated at Posted at 2026-10-05

・数列は久しぶりです。「nが整数のとき、」が抜けていました。申し訳ありません。
・OEIS に本数列がありました。
後半へ
https://qiita.com/mrrclb48z/items/c0f3bda6bc875041c567

オリジナル

松本幸夫 様 (0:00〜8:46 の内 0:00〜2:21) いつもお世話になっております。
↓倍数を示す問題2
https://youtu.be/JW0Q3MeZqLY

(本日の)Gemini先生の 「n^3+5n が6の倍数であることの証明」

すべての整数 $n$ について、$n^3 + 5n$ は 6 の倍数になります。式変形を用いる方法と数学的帰納法を用いる方法の2通りで証明します。
(Gemini先生のステキな回答省略。抜粋)

sympy のソースコードで教えて下さい。計算結果もmarkdown の背景黒で。

・追加でmod も教えてもらいました。

[1] 式変形を用いる方法

パート1:式変形による証明(連続する3整数の積を利用)

# SymPyを用いて n^3 + 5n の式変形(連続する3整数の積)と6の倍数判定を検証するコード
import sympy as sp

# 記号 n を整数として定義
n = sp.Symbol('n', integer=True)

# 1. n^3 - n の因数分解(連続する3整数の積)
expr_part = n**3 - n
factored_part = sp.factor(expr_part)

# 2. n^3 + 5n = (n^3 - n) + 6n の等式検証
expr_original = n**3 + 5*n
expr_transformed = factored_part + 6*n
is_valid = sp.simplify(expr_original - expr_transformed) == 0

# 3. すべての余り (n mod 6 = 0, 1, 2, 3, 4, 5) に対する 6 の倍数判定
mod_results = {r: (r**3 + 5*r) % 6 for r in range(6)}

# 結果の表示
print("=== 式変形の検証 ===")
print(f"n^3 - n の因数分解                   : {factored_part}")
print(f"n^3 + 5n = (n^3 - n) + 6n の変形結果  : {expr_transformed}")
print(f"元の式と変形後の式の等価性 (差が0か)  : {is_valid}")

print("\n=== n mod 6 における余りの検証 ===")
for r, rem in mod_results.items():
    val = r**3 + 5*r
    print(f"n ≡ {r} (mod 6) のとき: {r}^3 + 5*{r} = {val:3d} ≡ {rem} (mod 6)")

計算結果

=== 式変形の検証 ===
n^3 - n の因数分解                   : n*(n - 1)*(n + 1)
n^3 + 5n = (n^3 - n) + 6n の変形結果  : n*(n - 1)*(n + 1) + 6n
元の式と変形後の式の等価性 (差が0か)  : True

=== n mod 6 における余りの検証 ===
n ≡ 0 (mod 6) のとき: 0^3 + 5*0 =   0 ≡ 0 (mod 6)
n ≡ 1 (mod 6) のとき: 1^3 + 5*1 =   6 ≡ 0 (mod 6)
n ≡ 2 (mod 6) のとき: 2^3 + 5*2 =  18 ≡ 0 (mod 6)
n ≡ 3 (mod 6) のとき: 3^3 + 5*3 =  42 ≡ 0 (mod 6)
n ≡ 4 (mod 6) のとき: 4^3 + 5*4 =  84 ≡ 0 (mod 6)
n ≡ 5 (mod 6) のとき: 5^3 + 5*5 = 150 ≡ 0 (mod 6)

[2] 数学的帰納法を用いる方法

パート2:数学的帰納法による証明($n$ が自然数の場合)

# SymPyを用いて数学的帰納法(n^3 + 5n が6の倍数であること)の各ステップを検証するコード
import sympy as sp

# 記号 n, k, m を整数として定義
n, k, m = sp.symbols('n k m', integer=True)

# 与式 P(n) の定義
def P(n_val):
    return n_val**3 + 5*n_val

# [1] 基礎ステップ (n = 1 のとき)
p_1 = P(1)
p_1_mod_6 = p_1 % 6

# [2] 帰納ステップ (n = k+1 のときの展開と変形)
p_k_plus_1 = P(k + 1)
p_k_plus_1_expanded = sp.expand(p_k_plus_1)

# 仮定 P(k) = k^3 + 5k = 6m を用いた代入 (k^3 を 6m - 5k に置き換え)
p_k_plus_1_subbed = p_k_plus_1_expanded.subs(k**3, 6*m - 5*k)
p_k_plus_1_simplified = sp.simplify(p_k_plus_1_subbed)

# 3k(k+1) + 6(m+1) の形へ因数分解・整理
# 3k(k+1) が常に 6 の倍数になることの検証 (k(k+1) は偶数)
k_term = 3*k*(k + 1)
# 任意の整数 k に対して 3k(k+1) % 6 が常に 0 になるか確認
k_term_mod_6_check = all((3*i*(i + 1)) % 6 == 0 for i in range(6))

# 結果の表示
print("=== [1] 基礎ステップ (n = 1) ===")
print(f"P(1) = 1^3 + 5*1 = {p_1}")
print(f"P(1) mod 6 = {p_1_mod_6} (6の倍数であるか: {p_1_mod_6 == 0})")

print("\n=== [2] 帰納ステップ (n = k + 1) ===")
print(f"P(k + 1) の展開結果 : {p_k_plus_1_expanded}")
print(f"仮定 (k^3 = 6m - 5k) を代入後 : {p_k_plus_1_simplified}")
print(f"6で括った形 : 6*m + 3*k*(k + 1) + 6")
print(f"3k(k+1) が常に6の倍数か (k mod 6 全判定) : {k_term_mod_6_check}")

計算結果

=== [1] 基礎ステップ (n = 1) ===
P(1) = 1^3 + 5*1 = 6
P(1) mod 6 = 0 (6の倍数であるか: True)

=== [2] 帰納ステップ (n = k + 1) ===
P(k + 1) の展開結果 : k**3 + 3*k**2 + 8*k + 6
仮定 (k^3 = 6m - 5k) を代入後 : 3*k**2 + 3*k + 6*m + 6
6で括った形 : 6*m + 3*k*(k + 1) + 6
3k(k+1) が常に6の倍数か (k mod 6 全判定) : True

整数ですけど

整数ですけど、負の数だとソースコードが変ってきますか。

いいえ、負の数であってもソースコードを変更する必要はありません。
数学的にもプログラム的にも、「すべての整数 $n$(正・0・負)」に対してそのまま成り立ちます。

  1. 式変形(パート1)の観点...
  2. 数学的帰納法(パート2)の観点...

負の数も含めた検証 SymPy コード

# 負の数も含めた整数全域での検証
import sympy as sp

n = sp.Symbol('n', integer=True)
expr = n**3 + 5*n

# -5 から 5 までの負の数・0・正の数を評価
results = {i: expr.subs(n, i) for i in range(-5, 6)}

print("=== 負の数・0・正の数での代入結果と 6 の倍数判定 ===")
for val, res in results.items():
    is_divisible = (res % 6 == 0)
    print(f"n = {val:2d} : {val:2d}^3 + 5*({val:2d}) = {res:4d} (6の倍数: {is_divisible})")
=== 負の数・0・正の数での代入結果と 6 の倍数判定 ===
n = -5 : -5^3 + 5*(-5) = -150 (6の倍数: True)
n = -4 : -4^3 + 5*(-4) =  -84 (6の倍数: True)
n = -3 : -3^3 + 5*(-3) =  -42 (6の倍数: True)
n = -2 : -2^3 + 5*(-2) =  -18 (6の倍数: True)
n = -1 : -1^3 + 5*(-1) =   -6 (6の倍数: True)
n =  0 :  0^3 + 5*( 0) =    0 (6の倍数: True)
n =  1 :  1^3 + 5*( 1) =    6 (6の倍数: True)
n =  2 :  2^3 + 5*( 2) =   18 (6の倍数: True)
n =  3 :  3^3 + 5*( 3) =   42 (6の倍数: True)
n =  4 :  4^3 + 5*( 4) =   84 (6の倍数: True)
n =  5 :  5^3 + 5*( 5) =  150 (6の倍数: True)

mod を 使ったsympy のソースコード を教えて下さい。

# SymPyを用いて n^3 + 5n が 6 の倍数であることを mod (剰余) で検証するコード
import sympy as sp

# 記号 n を整数として定義
n = sp.Symbol('n', integer=True)

# 与式
expr = n**3 + 5*n

# 1. 式全体に対する mod 6 計算(合同式での簡略化: 5n ≡ -n mod 6 より n^3 - n ≡ (n-1)n(n+1) ≡ 0)
mod_expr = sp.Mod(expr, 6)

# 2. n を 6 で割った余り (0, 1, 2, 3, 4, 5) ごとの評価
mod_results = {r: sp.Mod(expr.subs(n, r), 6) for r in range(6)}

# 3. 負の数を含む任意の整数(例: -5 ~ 5)での Mod 評価
all_check = {k: sp.Mod(expr.subs(n, k), 6) for k in range(-5, 6)}

# 結果の表示
print("=== SymPy Mod 関数による検証 ===")
print(f"元式                  : {expr}")
print(f"Mod(n^3 + 5n, 6) 構造 : {mod_expr}")

print("\n=== n = 0, 1, 2, 3, 4, 5 (mod 6) での検証 ===")
for r, res in mod_results.items():
    print(f"n ≡ {r} (mod 6) のとき: Mod({r}^3 + 5*{r}, 6) = {res}")

print("\n=== 負の数・0・正の数 (n = -5 ~ 5) での検証 ===")
print(f"すべての余りが 0 か   : {all(res == 0 for res in all_check.values())}")

計算結果

=== SymPy Mod 関数による検証 ===
元式                  : n**3 + 5*n
Mod(n^3 + 5n, 6) 構造 : Mod(n**3 + 5*n, 6)

=== n = 0, 1, 2, 3, 4, 5 (mod 6) での検証 ===
n ≡ 0 (mod 6) のとき: Mod(0^3 + 5*0, 6) = 0
n ≡ 1 (mod 6) のとき: Mod(1^3 + 5*1, 6) = 0
n ≡ 2 (mod 6) のとき: Mod(2^3 + 5*2, 6) = 0
n ≡ 3 (mod 6) のとき: Mod(3^3 + 5*3, 6) = 0
n ≡ 4 (mod 6) のとき: Mod(4^3 + 5*4, 6) = 0
n ≡ 5 (mod 6) のとき: Mod(5^3 + 5*5, 6) = 0

=== 負の数・0・正の数 (n = -5 ~ 5) での検証 ===
すべての余りが 0 か   : True

n^3+5*n は, オンライン整数列辞典 にありますか

OEIS ID: A004006

(おまけ)Gemini先生へ。履歴。

・重複していますが、そのままです。

1. n^3+5*n は,6の倍数である。
2. 2つに分けて。
3. [1]をsympy のソースコードで教えて下さい。計算結果もmarkdown の背景黒で。
4. [2]をsympy のソースコードで教えて下さい。計算結果もmarkdown の背景黒で。
5. 整数ですけど、負の数だとソースコードが変ってきますか。
6. n^3+5*n は, オンライン整数列辞典 にありますか
7. url を教えて
8. 間違っています
9. mod を 使ったsympy のソースコード を教えて下さい。
10. 上記の私の質問すべてから、Markdownのテキスト形式で、質問リストを出力して。追番を追加して。本質問も含めて。コピーできる形式で。空白行不要です。

いつもの? sympyの実行環境 と 参考のおすすめです。

sympyのweb上での実行方法

SymPy Live Shellで。FreeCADのマクロは、以下で実行できません。

(テンプレート)

いつもと違うおすすめです。

sympy のdoc

Qiita内で

・PR
数列といえば。tagもありますが、シツコイゾーです。

wikipedia で

・後半で

・OEISで
https://en.wikipedia.org/wiki/On-Line_Encyclopedia_of_Integer_Sequences

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?