一、前言
写一篇优质一点的文章吧。
数学是一个奇妙的东西,对此,也衍生出了许多的悖论与猜想,例如整活(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("请输入正确")#提示
与其说是自己写,不如说是将一个程序升级改变的练手程序,将偶数哥德巴赫猜想的程序升级成奇数哥德巴赫猜想。
到此这篇关于利用Python对哥德巴赫猜想进行检验和推理的文章就介绍到这了,更多相关Python哥德巴赫猜想内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!