乐读窝

程序员的数学思维修炼

乐读窝 > 科普学习 > 程序员的数学思维修炼

2.4哥德巴赫猜想

书籍名:《程序员的数学思维修炼》    作者:周颖



说到素数的相关知识,就离不开哥德巴赫猜想。本节简单介绍哥德巴赫猜想的相关内容,了解什么是哥德巴赫猜想,怎么进行哥德巴赫猜想验证。



2.4.1 哥德巴赫猜想是什么


1742年,在给欧拉的信中,哥德巴赫提出了以下猜想:

因现今数学界已经不使用“1也是素数”这个约定,当初猜想的现代陈述为:

欧拉在回信中也提出另一等价版本,即:

今日常见的猜想陈述为欧拉的版本,把命题:

1966年,我国的陈景润证明了“1+2”的成立,即:

对于哥德巴赫猜想的实际验证表明,至少4~1014以下的偶数都能表示成两个素数之和。很多时候,偶数表示成两个素数和的方法还不止一种,例如:

大数学家欧拉相信这个猜想是正确的,但他不能证明。

叙述如此简单的问题,连欧拉这样首屈一指的数学家都不能证明,这个猜想便引起了许多数学家的注意。从哥德巴赫提出这个猜想至今,许多数学家都不断努力想攻克它,但都没有成功。

为什么说没有成功呢?由于在数列中,某一个数是否为素数是没有规律的,只能逐个推算。而对于一个很大的整数,要求出其等于两个素数之和,其计算量是非常巨大的,例如,要求1万位或10万位的整数是否等于两个素数之和,不要说手工计算,就是用计算机来推算,其程序设计的工作量都显得很复杂,需要处理大量的数据存储和转换过程。当然,对于一些比较小的整数,则可以很容易地求出来其等于两个素数之和。



2.4.2 数值验证


与不少数学猜想一样,数值上的验证也是哥德巴赫猜想的重要一环。

1938年,尼尔斯·皮平(Nils  Pipping)验证了所有小于105的偶数。

1964年,M·L·斯坦恩和P·R·斯坦恩验证了小于107的偶数。

1989年,A·格兰维尔将验证范围扩大到2×1010。

1993年,Matti  K.  Sinisalo验证了4×1011以内的偶数。

2000年,Jorg  Richstein验证了4×1014以内的偶数。

至2012年2月为止,数学家已经验证了3.5×1018以内的偶数,在所有的验证中,没有发现偶数哥德巴赫猜想的反例。

虽然不是数学家,但身为程序员的我们也可进行一翻哥德巴赫猜想的验证,例如:

首先检验:6=3+3;

接着检验:8=3+5;

接着检验:10=5+5;

…… ……

下面利用计算机的快速计算能力,编写程序验证哥德巴赫猜想。

对于哥德巴赫猜想的验证,算法很简单,其基本思路是:设N为大于等于6的一个偶数,可将其分解为N1和N2两个数,分别检查N1和N2是否为素数,如都是,则在该数中得到验证。若N1不是素数,就不必再检查N2是否素数。先从N1=2开始,检验N1和N2(N2=N-N1)是否素数。然后是N1+2,再检验N1、N2是否素数……,直到N1=N/2为止。

为了提高程序的效率,可对程序进行优化,首先根据Eratosthenes算法将指定范围中的素数都筛选出来保存到一个数组中,接着对整数N进行分解和判断。

根据上面的思路,编写相应的C程序如下:



执行以上程序,输入1000000(一百万),验证1000000以内的偶数,运行结果如图2-12所示。

图2-12

从图2-12中的运行结果可看出,在1000000以内的所有偶数都通过了验证。