1. 程式人生 > 其它 >第37期-哥德巴赫猜想——偶數

第37期-哥德巴赫猜想——偶數

1 問題描述

將6-99之間的偶數都表示成兩個素數之和,輸出時每行輸出5組。

1742年,哥德巴赫給尤拉的信中提出了以下猜想:任一大於2的整數都可寫成三個質數之和。但是哥德巴赫自己無法證明它,於是就寫信請教赫赫有名的大數學家尤拉幫忙證明,然而一直到死,尤拉也無法證明。
因現今數學界已經不使用“1也是素數”這個約定,哥德巴赫猜想的現代陳述為:任一大於5的整數都可寫成兩個質數之和。(n>5:當n為偶數,n=2+(n-2),n-2也是偶數,可以分解為兩個質數的和;當n為奇數,n=3+(n-3),n-3也是偶數,可以分解為兩個質數的和)。尤拉在回信中也提出另一等價版本,即任一大於2的偶數都可寫成兩個質數之和。把命題"任一充分大的偶數都可以表示成為一個素因子個數不超過a的個數與另一個素因子不超過b的個數之和"記作"a+b"。1966年陳景潤證明了"1+2"成立,即"任一充分大的偶數都可以表示成二個素數的和,或是一個素數和一個半素數的和"。
今日常見的猜想陳述為尤拉的版本,即任一大於2的偶數都可寫成兩個素數之和,亦稱為“強哥德巴赫猜想”或“關於偶數的哥德巴赫猜想”。
從關於偶數的哥德巴赫猜想,可推出:任何一個大於7的奇數都能被表示成三個奇質數的和。後者稱為“弱哥德巴赫猜想”或“關於奇數的哥德巴赫猜想”。若關於偶數的哥德巴赫猜想是對的,則關於奇數的哥德巴赫猜想也會是對的。2013年5月,巴黎高等師範學院研究員哈洛德·賀歐夫各特發表了兩篇論文,宣佈徹底證明了弱哥德巴赫猜想。

2 解題思路

  • 輸出時每行輸出5組,可以記錄輸出次數後換行輸出
  • 遍歷6-99中的所有數,for迴圈
  • 判斷是否是素數的方法已經出現過很多次了

3 解題方法

a = [2]
for i in range(3, 100):
    b = 0
    for j in range(2, i):
        if i % j != 0:
            b += 1
            if b == i - 2:
                a.append(i)
m = 0
for i in range(6, 99):
    if i % 2 == 0:
        for
j in range(2, i): if j in a: if i - j in a: m += 1 if m == 5: print(f'{i}={j}+{i - j}') m = 0 else: print(f'{i}={j}+{i - j}', end=' ')
break
View Code

第1行:建立列表a用於存放素數
第2行:使用for迴圈遍歷3-100的整數,由於只需計算99以內的偶數,所以最大值選擇了100,用以判斷以及存放100以內的所有素數
第3-7行:計算是否從2到數本身都不是該數的因子,若是,你們該數就是素數
第8行:將判斷結果是素數的數加入到列表a中
第9行:m=0用於記錄每行輸出的個數
第10行:遍歷6-99中的所有整數
第11行:判斷整數是否是偶數
第12-14行:for迴圈遍歷小於i的整數,判斷該數以及該數與i的差是否都在a中(都在列表a中代表他們都是素數)
第15行:若滿足上述條件,則給m值加一用以判斷一行輸出了幾個
第16-18行:如果m等於5,則正常輸出便可(正常輸出會自動換行),並將m重新等於0
第19-20行:如果m不等於5,則輸出並以空格為結尾,這樣下次輸出就會和本次在同一行了
第21行:輸出完畢後結束迴圈

print()函式
print() 方法用於列印輸出,最常見的一個函式。
語法:
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
這裡主要介紹end
引數說明:
end -- 用來設定以什麼結尾。預設值是換行符 \n,我們可以換成其他字串。

程式碼執行結果為: