写一篇优质一点的文章吧。
数学是一个奇妙的东西,对此,也衍生出了许多的悖论与猜想,例如整活(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。
思路:
第一步:首先做一个寻找质数的程序,保存到列表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++。
我们试着让用户输入一个偶数,输出这个偶数变成两个质数的和的结果。
这样的程序更简单了一点。
思路:
第一步:还是寻找所有质数保存到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坤个)德芙的缺点。
接下来,我们检测奇数猜想是否成立。
思路:
第一步:初始化变量,获取用户的检测范围。
第二步:找到质数保存到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
思路还还还是看注释。
接下来,还是尝试一下用户给出一个奇数,返回他的三个质数之和的形式。
思路:
第一步:在偶数哥德巴赫猜想的基础上多加一层循环。
第二步:退出循环也多加一个。
第三步:判断条件和输出改变一下。
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("请输入正确")#提示
与其说是自己写,不如说是将一个程序升级改变的练手程序,将偶数哥德巴赫猜想的程序升级成奇数哥德巴赫猜想。
成功又海了一篇文章,不过算是新手很好的练手程序了,这篇文章更像是记录了学习过程。
大家可以自己敲一下代码,万一…随便输入一个数发现他不符合哥德巴赫猜想,恭喜你,你这辈子都不愁了(bushi。
散会!
--------------------------------------------------------------end----------------------------------------------------------