1. 程式人生 > >Python練習:哥德巴赫猜想

Python練習:哥德巴赫猜想

 

哥德巴赫猜想

哥德巴赫 1742 年給尤拉的信中哥德巴赫提出了以下猜想:任一大於 2 的偶數都可寫成兩個質數之和。但是哥德巴赫自己無法證明它,於是就寫信請教赫赫有名的大數學家尤拉幫忙證明,但是一直到死,尤拉也無法證明。因現今數學界已經不使用“1 也是質數”這個約定,原初猜想的現代陳述為:任一大於 5 的偶數都可寫成兩個質數之和。

功能拆解成幾個小程式:

  • 使用者輸入值的判斷:當值為數字是返回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

顯示結果: