Python練習:哥德巴赫猜測

 

哥德巴赫猜測

哥德巴赫 1742 年給歐拉的信中哥德巴赫提出瞭如下猜測:任一大於 2 的偶數均可寫成兩個質數之和。可是哥德巴赫本身沒法證實它,因而就寫信請教赫赫有名的大數學家歐拉幫忙證實,可是一直到死,歐拉也沒法證實。因現今數學界已經不使用「1 也是質數」這個約定,原初猜測的現代陳述爲:任一大於 5 的偶數均可寫成兩個質數之和。git

功能拆解成幾個小程序:編程

  • 用戶輸入值的判斷:當值爲數字是返回True,不然返回False
  • 奇數、偶數判斷:當值爲偶數時返回True,不然返回False
  • 質數的判斷:質數是數學上的定義,指的是隻能被1和它自己整除的數字。經過遍歷整除的結果便可判斷。
 1 def isEven( num ):
 2     #判斷是不是偶數
 3     if num % 2 == 0:
 4         return True
 5     else:
 6         return False
 7 
 8 def isPrime( num ):
 9     #判斷是不是質數
10     from math import sqrt
11     if num == 0 or num == 1:
12         flag = False
13     elif num == 2:
14         flag = True
15         
16     else:
17         for i in range(2, num):
18             if num % i == 0:
19                 flag = False
20                 break
21             else:
22                 flag = True
23     return flag
24 
25 def isNum( string ):
26     #判斷是不是數值
27     if string.isdigit():
28         return True
29     else:
30         return False
View Code

核心的功能已經完成函數化後,組合這些函數完成編程的目標:輸入任意一個大於5的偶數,證實這個偶數符合哥德巴赫猜測,並顯示是哪兩個質數。小程序

 1 respone = input('請輸入一個大於5的偶數:')
 2 if isNum(respone): #判斷輸入是否爲整數
 3     respone = int(respone) #判斷是不是大於5的偶數
 4     if (respone > 5) and isEven(respone):
 5          #進行猜測判斷
 6         i_list = []
 7         for i in range(1,respone):
 8             j = respone - i #分解爲兩個數字
 9             if isPrime(i) and isPrime(j):
10                 i_list.append(i) #記錄已顯示的數字
11                 if j in i_list:
12                     pass
13                 else:
14                     print( '{0} = {1} + {2}'.format(respone, i, j))
15     else:
16         print('輸入錯誤!')
17 else:
18     print('輸入錯誤!')
View Code

顯示結果:app

相關文章
相關標籤/搜索