ゴールドバッハの予想を紐解いてみる
完全数の判定方法をプログラミングしているうちに色々と発展していったところ、最終的に初歩的かつ特定条件下ではあるが、ゴールドバッハの予想が成り立つか判定できるプログラミングができたので、備忘録として残しておきます。
筆者は投稿日現在、Python始めて1週間なので、ソースコードは汚いと思いますし、もっと良いアルゴリズムがあると思いますが、大目に見て頂けると幸いです。
※プログラミング未経験でしたが、数学修士を出ております。
ゴールドバッハの予想とは
全ての3よりも大きな偶数は2つの素数の和として表すことができる
①特定数値における完全数の判定法
ポイントはループ文のrangeの設定方法であり、単にrange(num)と記載すると、0で割る処理が発生する。
# 入力値を数値に変換してリストへ格納する処理
num = int(input().rstrip())
#約数の合計値を入れる変数
sum = 0
#約数の合計値を求める処理
for i in range(1,num):
if num % i == 0:
sum += i
#約数の合計値を出力
if sum == num:
print("完全数")
②完全数の探し方
2から999までの数値の中で、完全数となるものは何があるかを探すプログラム
#約数の合計値を入れる変数
sum = 0
#約数の合計値を求める処理
for num in range(2,1000):
for i in range(1,num):
if num % i == 0:
sum += i
if sum == num:
print(str(num) + "は完全数である。")
sum = 0
③素数を見つけ出すプログラム)
今までのものを応用すると、素数を簡単にみつけることができる。
ここでは1000未満の素数に限定する。
#約数の合計値を入れる変数
sum = 0
#約数の合計値を求める処理
for num in range(2,1000):
for i in range(1,num+1):
if num % i == 0:
sum += i
if (sum - num) == 1:
print(str(num) + "は素数である。")
sum = 0
④(ようやく)ゴールドバッハの予想の一端を見る
今までのものを応用すると、ゴールドバッハの予想が正しい(かもしれない)というのが分かるプログラムを作ることができる。
ただし、利用する素数は2以上100未満のものだけであるので、汎用性はあまりない。
将来的には、何も参照せずに、より汎用性あるものを作ってみたい。
ここでは、入力値をinput()で取得して判定をするプログラムである。
#約数の合計値を入れる変数
sum = 0
list = []
#約数の合計値を求める処理
for num in range(2,100):
for i in range(1,num+1):
if num % i == 0:
sum += i
if (sum - num) == 1:
list.append(num)
sum = 0
gold_num = int(input().rstrip())
for p in range(len(list)):
for q in range(len(list)):
if (gold_num == list[p] + list[q]) and (q >= p):
print(str(gold_num) + "は" + str(list[p]) + "と" + str(list[q]) + "の和である")
## あとがき
Pythonを勉強し始めたばかりではあるが、こういう知っている数学の問題をPythonの基本的な関数を用いて解き明かすのは、頭を使うし本当に面白いと思う。
まだまだソースがきれいじゃないが、30代中盤からPython勉強しても、こういうふうになれることを証明したい。