利用Python對哥德巴赫猜想進(jìn)行檢驗和推理
一、前言
寫一篇優(yōu)質(zhì)一點的文章吧。
數(shù)學(xué)是一個奇妙的東西,對此,也衍生出了許多的悖論與猜想,例如整活(3)的生日悖論。
其實,這樣的悖論和猜想還有很多很多。
這篇文章會對哥德巴赫猜想用編程語言進(jìn)行檢驗和推理。
二、猜想簡介
哥德巴赫猜想,偶數(shù)猜想內(nèi)容為:任何一個大于4的偶數(shù)都可以表示成兩個質(zhì)數(shù)的和。
例如:4=2+2,6=3+3,8=3+5,10=5+5等等。
還有一個奇數(shù)的猜想,內(nèi)容為:任意一個大于7的奇數(shù)都可以表示成三個質(zhì)數(shù)的和。
例如:9=3+3+3,23=7+11+5,49=19+19+11,59=23+23+13等等。
要證明他是不容易的。我們以偶數(shù)猜想為例,問題迂回一下,“每一個大偶數(shù)可以表示成為一個素因子個數(shù)不超過a個的數(shù)與另一個素因子不超過b個的數(shù)之和”,我們暫且記作a+b,哥德巴赫猜想就是要證明1+1成立。
這個猜想有很多延伸版本:
9+9,7+7,6+6,5+7,4+9,3+15,2+366,5+5,4+4,1+c,3+4,3+3,2+3,1+5,1+4,1+3,1+2,s+t等等,這些已經(jīng)被證明了。
1+2由陳景潤證明,被稱為陳氏定理。
但是1+1仍然沒有證明。
三、偶數(shù)猜想
1.是否符合哥德巴赫猜想
這里,我們先計算一下1+1。
思路:
第一步:首先做一個尋找質(zhì)數(shù)的程序,保存到列表zhishu里面。
第二步:設(shè)置變量shu為4,之后死循環(huán),再套兩個for循環(huán)遍歷zhishu列表,如果兩個數(shù)相加的和為shu則退出循環(huán),shu+=2,再次重新執(zhí)行。
第三步:如果外層的for循環(huán)遍歷結(jié)束之后還是沒有找到則提醒這個數(shù)違反哥德巴赫猜想,之后堵塞。
第四步:python計算較久,給個安慰進(jìn)度。
代碼如下:
shu=4#初始化變量:shu zhishu=[]#保存質(zhì)數(shù)的列表 while 1:#死循環(huán)便于except語句重新 try:#異常捕獲 a=int(input("質(zhì)數(shù)的最大值?"))#詢問質(zhì)數(shù)的最大值 if a>=10000:#過大提示 print("您所填的數(shù)有點大,請耐心等待偵測")#給個心理準(zhǔn)備 if a<251:#填的數(shù)過小 print("這么?。磕銢]事吧")#提示 raise(ValueError())#強制報錯 break#沒有錯誤則退出循環(huán) except:#如果異常 print("重新填")#提示 #質(zhì)數(shù)檢測 for i in range(2,a):#循環(huán)檢測每一個數(shù)是不是質(zhì)數(shù) for j in range(2,i-1):#循環(huán)檢測這個數(shù)有沒有其他因數(shù) if i%j==0:#如果有 break#退出循環(huán),直接下一個數(shù) else:#如果循環(huán)為正常結(jié)束就是這是一個質(zhì)數(shù) zhishu.append(i)#列表zhishu添加 #開始檢測違反哥德巴赫猜想的數(shù) while 1:#死循環(huán)檢測 for i in zhishu:#第一個加數(shù) for j in zhishu:#第二個加數(shù) if i+j==shu:#兩個加數(shù)和為shu則是符合哥德巴赫猜想 break#退出循環(huán) if i+j==shu:#在檢測一遍來退出前面的循環(huán) break#退出循環(huán) else:#如果是正常結(jié)束的循環(huán)就是違反哥德巴赫猜想 print(shu,"愣著干啥?申請專利??!")#直接申請專利好吧 break#退出循環(huán)到堵塞地帶 shu+=2#shu自增2,保持他是偶數(shù) if shu%500==0:#安慰進(jìn)度 print(shu,"以內(nèi)沒有")#提醒 if shu>a:#到了這里可能出現(xiàn)誤判所以退出 print("檢測到頭了!")#提示 break#退出循環(huán) while True:#堵塞地帶 a=input("請退出程序")#input堵塞
具體的詳細(xì)解釋請看注釋。
這就是簡單的哥德巴赫猜想檢驗程序。不過因為python的程序慢死了,所以,我們可以用C++。
2.輸入偶數(shù),輸出兩個質(zhì)數(shù)
我們試著讓用戶輸入一個偶數(shù),輸出這個偶數(shù)變成兩個質(zhì)數(shù)的和的結(jié)果。
這樣的程序更簡單了一點。
思路:
第一步:還是尋找所有質(zhì)數(shù)保存到zhishu列表里面。
第二步:獲取用戶輸入(try語句排除錯誤)及偵測是否是偶數(shù),否則拋出異常讓except接受并輸出:“請檢查輸入是否為數(shù)字且為偶數(shù)。”
第三步:兩層for遍歷質(zhì)數(shù),如果和為這個數(shù)則輸出并跳出。
第四步:完善異常捕捉和不符合哥德巴赫猜想。
zhishu=[]#儲存質(zhì)數(shù)的列表 for i in range(2,10000):#循環(huán)檢測質(zhì)數(shù) for j in range(2,i-1):#2到i內(nèi)的每一個數(shù) if i%j==0:#如果i不是質(zhì)數(shù) break#退出循環(huán) else:#如果正常結(jié)束循環(huán)就是i是質(zhì)數(shù) zhishu.append(i)#zhishu添加i while 1:#死循環(huán)輸入輸出 try:#異常捕獲 shu=int(input("請輸入數(shù)字"))#獲取數(shù) if shu>10000 or shu<4 or shu%2==1:#必須是4到10000內(nèi)的偶數(shù) print("這個數(shù)必須是4到10000以內(nèi)的偶數(shù)!")#提示 continue#重新開始循環(huán) for i in zhishu:#遍歷第一個加數(shù) for j in zhishu:#遍歷第二個加數(shù) if i+j==shu:#如果成立 print(f"{i}+{j}={shu}")#輸出 break#跳出循環(huán) if i+j==shu:#再次判斷 break#再次跳出循環(huán) else:#如果這個數(shù)不符合哥德巴赫猜想 print(shu,"申請專利去!")#提示 except:#如果異常 print("請輸入正確")#提示
思路還是看注釋。這種方法就彌補了python的運行速度慢,和C++比起來差913個(1坤個)德芙的缺點。
四、奇數(shù)猜想
1.檢測是否符合
接下來,我們檢測奇數(shù)猜想是否成立。
思路:
第一步:初始化變量,獲取用戶的檢測范圍。
第二步:找到質(zhì)數(shù)保存到zhishu列表里面。
第三步:四層循環(huán),一層while三層for持續(xù)檢測。
第四步:如果等式成立,一步一步break退出循環(huán)。
第五步:循環(huán)退出后shu自己加二,完善不符合哥德巴赫猜想的情況。
zhishu=[]#儲存質(zhì)數(shù)的列表 shu=7#初始化變量shu while 1: try: a=int(input("輸入循環(huán)次數(shù),越大可糾察數(shù)越多但是速度越慢")) if a<1000 or a>20000: raise(valueError()) break except: print("請正確輸入") print("填寫的數(shù)最好在1000到20000之間") for i in range(2,a):#循環(huán)檢測質(zhì)數(shù) for j in range(2,i-1):#2到i內(nèi)的每一個數(shù) if i%j==0:#如果i不是質(zhì)數(shù) break#退出循環(huán) else:#如果正常結(jié)束循環(huán)就是i是質(zhì)數(shù) zhishu.append(i)#zhishu添加i while shu<a:#死循環(huán)輸出 for i in zhishu:#第一層循環(huán),i為第一個數(shù) for j in zhishu:#第二層循環(huán),j為第二個數(shù) for k in zhishu:#第三層循環(huán),k為第三個數(shù) if i+j*k==shu:#如果公式成立 print(i,"+",j,"*",k,"=",shu)#輸出 break#退出循環(huán) if i+j*k==shu:#如果等式成立 break#再次退出循環(huán) if i+j*k==shu:#如果等式成立 break#再再再次退出循環(huán) else:#如果循環(huán)正常結(jié)束,就是不符合哥德巴赫猜想 print(shu,"申請專利去啊!")#提示 break#退出大循環(huán) shu+=2#shu加2 print("結(jié)束")#退出大循環(huán)后提示
思路還還還是看注釋。
2.給出一數(shù)返回三數(shù)
接下來,還是嘗試一下用戶給出一個奇數(shù),返回他的三個質(zhì)數(shù)之和的形式。
思路:
第一步:在偶數(shù)哥德巴赫猜想的基礎(chǔ)上多加一層循環(huán)。
第二步:退出循環(huán)也多加一個。
第三步:判斷條件和輸出改變一下。
zhishu=[]#儲存質(zhì)數(shù)的列表 for i in range(2,10000):#循環(huán)檢測質(zhì)數(shù) for j in range(2,i-1):#2到i內(nèi)的每一個數(shù) if i%j==0:#如果i不是質(zhì)數(shù) break#退出循環(huán) else:#如果正常結(jié)束循環(huán)就是i是質(zhì)數(shù) zhishu.append(i)#zhishu添加i while 1:#死循環(huán)輸入輸出 try:#異常捕獲 shu=int(input("請輸入數(shù)字"))#獲取數(shù) if shu>10000 or shu<7 or shu%2==0:#必須是4到10000內(nèi)的偶數(shù) print("這個數(shù)必須是7到10000以內(nèi)的奇數(shù)!")#提示 continue#重新開始循環(huán) for i in zhishu:#遍歷第一個加數(shù) for j in zhishu:#遍歷第二個加數(shù) for k in zhishu:#遍歷第三個加數(shù) if i+j+k==shu:#如果成立 print(f"{i}+{j}+{k}={shu}")#輸出 break#跳出循環(huán) if i+j+k==shu:#再次判斷 break#再次跳出循環(huán) if i+j+k==shu:#再再再次判斷 break#再再再次跳出循環(huán) else:#如果這個數(shù)不符合哥德巴赫猜想 print(shu,"申請專利去!")#提示 except:#如果異常 print("請輸入正確")#提示
與其說是自己寫,不如說是將一個程序升級改變的練手程序,將偶數(shù)哥德巴赫猜想的程序升級成奇數(shù)哥德巴赫猜想。
到此這篇關(guān)于利用Python對哥德巴赫猜想進(jìn)行檢驗和推理的文章就介紹到這了,更多相關(guān)Python哥德巴赫猜想內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實現(xiàn)與arduino的串口通信的示例代碼
本文主要介紹了python實現(xiàn)與arduino的串口通信的示例代碼, 在Python中,我們可以使用pyserial庫來實現(xiàn)與Arduino的串口通信,下面就來介紹一下如何使用,感興趣的可以了解一下2024-01-01