栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > 学术 > 人文期刊 > 电脑报

哥德巴赫猜想的Python验证

电脑报 更新时间: 发布时间: 学术归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

哥德巴赫猜想的Python验证

王德贵 丁大为

哥德巴赫猜想,是世界近代三大数学难题之一。华罗庚是中国最早从事哥德巴赫猜想的数学家。1936—1938年,他赴英留学,师从哈代研究数论,并开始研究哥德巴赫猜想,验证了几乎所有的偶数猜想。1966年,华罗庚的学生陈景润在对筛法做了新的重要改进后,证明了“1+2”,他证明了任何一个充分大的偶数,都可以表示为两个数之和,其中一个是质数,另一个或为质数或为两个质数的乘积,被称为“陈氏定理”,这在当时影响很大,但之后就再也没有什么研究进展了。一、哥德巴赫猜想内容

哥德巴赫猜想,是数学史上和质数有关的数学猜想,影响了一代又一代数学家。

1742年6月7日,德国数学家哥德巴赫在写给著名数学家欧拉的一封信中,提出了一个大胆的猜想:任何不小于3的奇数,都可以是三个质数之和(如:7=2+2+3。当时1仍属于质数)。

同年,6月30日,欧拉在回信中提出了另一个版本的哥德巴赫猜想:任何偶数,都可以是两个质数之和(如:4=2+2。当时1仍属于质数)。

这就是数学史上著名的“哥德巴赫猜想”。由于1已经不归为质数,所以这两个猜想分别变为:

任何不小于7的奇数,都可以写成三个质数之和的形式;

任何不小于4的偶数,都可以写成两个质数之和的形式。

20世纪,随着计算机技术的发展,数学家们发现哥德巴赫猜想对于更大的数依然成立。但自然数是无限的,无法判断是否存在某一个足够大的偶数,成为哥德巴赫猜想的反例,但数学家们仍在不断的探索中,寻求着各种不同的解决方法。

如果想了解更深入的知识,大家可以参考相关资料。今天我们只利用Python做基本验证。二、创意来源

在Python学习过程中,尝试解决一些问题,特别是世界数学难题,不仅是一种乐趣,同时也能学到数学知识,了解一些数学发展历史,也可以提高学生的学习兴趣和学习积极性,更能加深理解程序的优化与调试。三、设计思路

“关于偶数的哥德巴赫猜想”,我们可以将要分析的任一正整数减去一个质数,然后看看结果是不是也为质数,这是一种方法;还有一种方法就是遍历质数,看看有没有符合条件的两个质数。

“关于奇数的哥德巴赫猜想”,我们可以将要分析的任一正整数减去一个质数,然后看看结果是不是也为质数,这是一种方法;还有一种方法就是遍历质数,看看有没有符合条件的三个质数。

这几种方法的基础都需要把正整数范围内的质数先求出来。我们用列表形式将质数存储,计算和访问很方便。四、Python验证

1.关于偶数的哥德巴赫猜想

任何不小于4的偶数,都可以写成两个质数之和的形式。

这个猜想的理解是,4=2+2,6=3+3,8=3+5,10=3+

7,12=5+7……有无数个,我们无法一一列举,通过编程也只能验证有限范围,否则运行时间将无限延长。

(1)方法一:遍历质数列表,取出两个质数验证

程序有两部分,一是建立质数列表,二是在列表中确定有没有满足条件的质数。有一组则程序结束,并显示出来(图1)。

也可以利用自定义函数,程序如图2。

要求出不小于这个偶数范围内的质数,于是把质数获取做了自定义函数,利用列表把质数列举出来,然后便于下一步计算和验证。

输入不小于4的偶数后,调用自定义函数,把这个范围内的质数放在列表里,然后利用枚举算法,在列表中取两个数,验证是否等于输入的偶数,如果等于偶数,即输出。

这两个程序运行结果是完全一样的,它们都是在质数列表里任意取两个数,验证其和是不是等于输入的偶数。

(2)方法二:判断偶数与质数的差是否为质数

这种方法减小了时间复杂度,运行速度更快,程序如图3。

測试结果如图4。

2.关于奇数的哥德巴赫猜想

任何不小于7的奇数,都可以写成三个质数之和的形式。

根据前面的验证,修改程序,便可以验证“关于奇数数的哥德巴赫猜想”。即多加一重for循环,同时判断输入数与两个质数之差是否也为质数,如果是,则输出算式,程序结束(图5)。

验证结果如图6。

五、测试与改进

1.测试解的个数

我们前面的程序,只显示了一组解。其实,输入任意一个不小于4的偶数,都至少能表示为一对质数之和,输入任意一个不小于7的奇数,都至少有一组能表示为三个质数之和,如果想全部算式都显示出来,只要删除程序中“break”相关的语句即可。

比如,“关于偶数的哥德巴赫猜想”,修改程序如图7。

运行结果如下,这里进行了去重(图8)。

“关于奇数的哥德巴赫猜想”,修改程序如下,运行后发现满足条件的解很多,但却是有重复的(图9)。

输入23,得到21组解,那如何去重呢?大家利用列表或集合都可以实现,这里不再赘述(圖10)。

2.验证是否包括所有整数

所有偶数和奇数,我们不能一一验证,那么在一定范围内,是否包括所有值呢?我们来验证一下。

(1)验证一定范围内所有偶数

将一定范围内的质数存入列表,然后遍历列表求和,如果和的所有值,包含了所有偶数,则说明任意偶数都可以表示为两个质数的和。

程序中,运用集合去重和做差,检验是否包含所有偶数。

50范围内的验证,同样只显示了一组解(图11)。

(2)验证一定范围内所有奇数

将一定范围内的质数存入列表,然后遍历列表求和,如果和的所有值,包含了所有奇数,则说明任意奇数都可以表示为三个质数的和。

程序中,同样运用集合去重和做差,检验是否包含所有奇数。

50范围内的验证,同样只显示了一组解(图12)。

通过测试,在一定范围内,均得到了验证,但数值过大时,用时较长。当然我们要证明一个定理,不可能把所有值都验证,还需要理论上的证明。

我们这里只是做个简单的、基本的验证,也是小范围的验证,真正的猜想还没有完全被证明,也希望大家能发挥自己的智慧和力量,进一步研究和探讨,找到一个方法,把猜想变成定理,去摘取数学世界皇冠上的明珠!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/xueshu/247528.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号