论文部分内容阅读
哥德巴赫猜想,是世界近代三大数学难题之一。华罗庚是中国最早从事哥德巴赫猜想的数学家。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学习过程中,尝试解决一些问题,特别是世界数学难题,不仅是一种乐趣,同时也能学到数学知识,了解一些数学发展历史,也可以提高学生的学习兴趣和学习积极性,更能加深理解程序的优化与调试。
“关于偶数的哥德巴赫猜想”,我们可以将要分析的任一正整数减去一个质数,然后看看结果是不是也为质数,这是一种方法;还有一种方法就是遍历质数,看看有没有符合条件的两个质数。
“关于奇数的哥德巴赫猜想”,我们可以将要分析的任一正整数减去一个质数,然后看看结果是不是也为质数,这是一种方法;还有一种方法就是遍历质数,看看有没有符合条件的三个质数。
这几种方法的基础都需要把正整数范围内的质数先求出来。我们用列表形式将质数存储,计算和访问很方便。
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)。
通过测试,在一定范围内,均得到了验证,但数值过大时,用时较长。当然我们要证明一个定理,不可能把所有值都验证,还需要理论上的证明。
我们这里只是做个简单的、基本的验证,也是小范围的验证,真正的猜想还没有完全被证明,也希望大家能发挥自己的智慧和力量,进一步研究和探讨,找到一个方法,把猜想变成定理,去摘取数学世界皇冠上的明珠!
一、哥德巴赫猜想内容
哥德巴赫猜想,是数学史上和质数有关的数学猜想,影响了一代又一代数学家。
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)。
通过测试,在一定范围内,均得到了验证,但数值过大时,用时较长。当然我们要证明一个定理,不可能把所有值都验证,还需要理论上的证明。
我们这里只是做个简单的、基本的验证,也是小范围的验证,真正的猜想还没有完全被证明,也希望大家能发挥自己的智慧和力量,进一步研究和探讨,找到一个方法,把猜想变成定理,去摘取数学世界皇冠上的明珠!