Python練習:哥德巴赫猜想
阿新 • • 發佈:2018-12-31
哥德巴赫猜想¶
哥德巴赫 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 = TrueView Code15 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 returnTrue 29 else: 30 return False
核心的功能已經完成函式化後,組合這些函式完成程式設計的目標:輸入任意一個大於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
顯示結果: