利用Python对哥德巴赫猜想进行检验和推理

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

利用Python对哥德巴赫猜想进行检验和推理

¿¿¿¡¡¡   2022-12-07 我要评论

一、前言

写一篇优质一点的文章吧。

数学是一个奇妙的东西,对此,也衍生出了许多的悖论与猜想,例如整活(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("请输入正确")#提示

与其说是自己写,不如说是将一个程序升级改变的练手程序,将偶数哥德巴赫猜想的程序升级成奇数哥德巴赫猜想。

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们