網站首頁 編程語言 正文
一、前言
寫一篇優質一點的文章吧。
數學是一個奇妙的東西,對此,也衍生出了許多的悖論與猜想,例如整活(3)的生日悖論。
其實,這樣的悖論和猜想還有很多很多。
這篇文章會對哥德巴赫猜想用編程語言進行檢驗和推理。
二、猜想簡介
哥德巴赫猜想,偶數猜想內容為:任何一個大于4的偶數都可以表示成兩個質數的和。
例如:4=2+2,6=3+3,8=3+5,10=5+5等等。
還有一個奇數的猜想,內容為:任意一個大于7的奇數都可以表示成三個質數的和。
例如:9=3+3+3,23=7+11+5,49=19+19+11,59=23+23+13等等。
要證明他是不容易的。我們以偶數猜想為例,問題迂回一下,“每一個大偶數可以表示成為一個素因子個數不超過a個的數與另一個素因子不超過b個的數之和”,我們暫且記作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等等,這些已經被證明了。
1+2由陳景潤證明,被稱為陳氏定理。
但是1+1仍然沒有證明。
三、偶數猜想
1.是否符合哥德巴赫猜想
這里,我們先計算一下1+1。
思路:
第一步:首先做一個尋找質數的程序,保存到列表zhishu里面。
第二步:設置變量shu為4,之后死循環,再套兩個for循環遍歷zhishu列表,如果兩個數相加的和為shu則退出循環,shu+=2,再次重新執行。
第三步:如果外層的for循環遍歷結束之后還是沒有找到則提醒這個數違反哥德巴赫猜想,之后堵塞。
第四步:python計算較久,給個安慰進度。
代碼如下:
shu=4#初始化變量:shu
zhishu=[]#保存質數的列表
while 1:#死循環便于except語句重新
try:#異常捕獲
a=int(input("質數的最大值?"))#詢問質數的最大值
if a>=10000:#過大提示
print("您所填的數有點大,請耐心等待偵測")#給個心理準備
if a<251:#填的數過小
print("這么小?你沒事吧")#提示
raise(ValueError())#強制報錯
break#沒有錯誤則退出循環
except:#如果異常
print("重新填")#提示
#質數檢測
for i in range(2,a):#循環檢測每一個數是不是質數
for j in range(2,i-1):#循環檢測這個數有沒有其他因數
if i%j==0:#如果有
break#退出循環,直接下一個數
else:#如果循環為正常結束就是這是一個質數
zhishu.append(i)#列表zhishu添加
#開始檢測違反哥德巴赫猜想的數
while 1:#死循環檢測
for i in zhishu:#第一個加數
for j in zhishu:#第二個加數
if i+j==shu:#兩個加數和為shu則是符合哥德巴赫猜想
break#退出循環
if i+j==shu:#在檢測一遍來退出前面的循環
break#退出循環
else:#如果是正常結束的循環就是違反哥德巴赫猜想
print(shu,"愣著干啥?申請專利啊!")#直接申請專利好吧
break#退出循環到堵塞地帶
shu+=2#shu自增2,保持他是偶數
if shu%500==0:#安慰進度
print(shu,"以內沒有")#提醒
if shu>a:#到了這里可能出現誤判所以退出
print("檢測到頭了!")#提示
break#退出循環
while True:#堵塞地帶
a=input("請退出程序")#input堵塞
具體的詳細解釋請看注釋。
這就是簡單的哥德巴赫猜想檢驗程序。不過因為python的程序慢死了,所以,我們可以用C++。
2.輸入偶數,輸出兩個質數
我們試著讓用戶輸入一個偶數,輸出這個偶數變成兩個質數的和的結果。
這樣的程序更簡單了一點。
思路:
第一步:還是尋找所有質數保存到zhishu列表里面。
第二步:獲取用戶輸入(try語句排除錯誤)及偵測是否是偶數,否則拋出異常讓except接受并輸出:“請檢查輸入是否為數字且為偶數。”
第三步:兩層for遍歷質數,如果和為這個數則輸出并跳出。
第四步:完善異常捕捉和不符合哥德巴赫猜想。
zhishu=[]#儲存質數的列表
for i in range(2,10000):#循環檢測質數
for j in range(2,i-1):#2到i內的每一個數
if i%j==0:#如果i不是質數
break#退出循環
else:#如果正常結束循環就是i是質數
zhishu.append(i)#zhishu添加i
while 1:#死循環輸入輸出
try:#異常捕獲
shu=int(input("請輸入數字"))#獲取數
if shu>10000 or shu<4 or shu%2==1:#必須是4到10000內的偶數
print("這個數必須是4到10000以內的偶數!")#提示
continue#重新開始循環
for i in zhishu:#遍歷第一個加數
for j in zhishu:#遍歷第二個加數
if i+j==shu:#如果成立
print(f"{i}+{j}={shu}")#輸出
break#跳出循環
if i+j==shu:#再次判斷
break#再次跳出循環
else:#如果這個數不符合哥德巴赫猜想
print(shu,"申請專利去!")#提示
except:#如果異常
print("請輸入正確")#提示
思路還是看注釋。這種方法就彌補了python的運行速度慢,和C++比起來差913個(1坤個)德芙的缺點。
四、奇數猜想
1.檢測是否符合
接下來,我們檢測奇數猜想是否成立。
思路:
第一步:初始化變量,獲取用戶的檢測范圍。
第二步:找到質數保存到zhishu列表里面。
第三步:四層循環,一層while三層for持續檢測。
第四步:如果等式成立,一步一步break退出循環。
第五步:循環退出后shu自己加二,完善不符合哥德巴赫猜想的情況。
zhishu=[]#儲存質數的列表
shu=7#初始化變量shu
while 1:
try:
a=int(input("輸入循環次數,越大可糾察數越多但是速度越慢"))
if a<1000 or a>20000:
raise(valueError())
break
except:
print("請正確輸入")
print("填寫的數最好在1000到20000之間")
for i in range(2,a):#循環檢測質數
for j in range(2,i-1):#2到i內的每一個數
if i%j==0:#如果i不是質數
break#退出循環
else:#如果正常結束循環就是i是質數
zhishu.append(i)#zhishu添加i
while shu<a:#死循環輸出
for i in zhishu:#第一層循環,i為第一個數
for j in zhishu:#第二層循環,j為第二個數
for k in zhishu:#第三層循環,k為第三個數
if i+j*k==shu:#如果公式成立
print(i,"+",j,"*",k,"=",shu)#輸出
break#退出循環
if i+j*k==shu:#如果等式成立
break#再次退出循環
if i+j*k==shu:#如果等式成立
break#再再再次退出循環
else:#如果循環正常結束,就是不符合哥德巴赫猜想
print(shu,"申請專利去啊!")#提示
break#退出大循環
shu+=2#shu加2
print("結束")#退出大循環后提示
思路還還還是看注釋。
2.給出一數返回三數
接下來,還是嘗試一下用戶給出一個奇數,返回他的三個質數之和的形式。
思路:
第一步:在偶數哥德巴赫猜想的基礎上多加一層循環。
第二步:退出循環也多加一個。
第三步:判斷條件和輸出改變一下。
zhishu=[]#儲存質數的列表
for i in range(2,10000):#循環檢測質數
for j in range(2,i-1):#2到i內的每一個數
if i%j==0:#如果i不是質數
break#退出循環
else:#如果正常結束循環就是i是質數
zhishu.append(i)#zhishu添加i
while 1:#死循環輸入輸出
try:#異常捕獲
shu=int(input("請輸入數字"))#獲取數
if shu>10000 or shu<7 or shu%2==0:#必須是4到10000內的偶數
print("這個數必須是7到10000以內的奇數!")#提示
continue#重新開始循環
for i in zhishu:#遍歷第一個加數
for j in zhishu:#遍歷第二個加數
for k in zhishu:#遍歷第三個加數
if i+j+k==shu:#如果成立
print(f"{i}+{j}+{k}={shu}")#輸出
break#跳出循環
if i+j+k==shu:#再次判斷
break#再次跳出循環
if i+j+k==shu:#再再再次判斷
break#再再再次跳出循環
else:#如果這個數不符合哥德巴赫猜想
print(shu,"申請專利去!")#提示
except:#如果異常
print("請輸入正確")#提示
與其說是自己寫,不如說是將一個程序升級改變的練手程序,將偶數哥德巴赫猜想的程序升級成奇數哥德巴赫猜想。
原文鏈接:https://blog.csdn.net/C_ygxb/article/details/128144195
相關推薦
- 2023-12-22 CSS濾鏡(filter)
- 2022-12-06 Android?SwipeRefreshLayout超詳細講解_Android
- 2022-05-02 詳解SQL之CASE?WHEN具體用法_MsSql
- 2022-05-20 Shell編寫格式和執行方式
- 2023-04-01 Python實現處理apiDoc轉swagger的方法詳解_python
- 2023-04-07 Redux?saga異步管理與生成器詳解_React
- 2022-04-25 python?實現兩個字符串乘法小練習_python
- 2022-07-28 Python?Flask實現圖片上傳與下載的示例詳解_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支