哥德巴赫猜想的验证

2022-09-02

第一篇:哥德巴赫猜想的验证

编程验证哥德巴赫猜想的一个命题

编程验证哥德巴赫猜想的一个命题:任何大于6的偶数均可以表示为两个素数之和。

即:程序所要完成的功能是,输入任意一个大于等于6的整数,输出它等于一个素数+另一个素之和。当输入的数不是大于等于6的整数,则输出:error。 例1:

输出:please enter a even number:

输入:6

输出:6=3+3

例2:

输出:please enter a even number:

输入:180

输出:7+173

例3:

输出:please enter a even number:

输入:5

输出:error

所有上传于此的文件都将被进行抄袭检测。

第二篇:验证哥德巴赫猜想

60006程序填空,不要改变与输入输出有关的语句。

验证哥德巴赫猜想:任何一个大于6的偶数均可表示为两个素数之和。例如6=3+3,8=3+5,…,18=7+11。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。

输入两个正整数 m 和 n(6<=m<=n<=100),将 m 到 n 之间的偶数表示成两个素数之和,打印时一行打印5组。

要求定义并调用函数 prime(m) 判断m是否为素数,当m为素数时返回1,否则返回0,函数形参 m 的类型是int,函数类型是int。

输出使用语句:printf("%d=%d+%d ", number, i, number - i);

输入输出示例:括号内为说明

输入:

89 100(m=89, n=100)

输出:

90=7+83 92=3+89 94=5+89 96=7+89 98=19+79

100=3+97

#include "stdio.h"

#include "math.h"

int main(void)

{

int count, i, m, n, number;

int prime(int m);

scanf("%d%d", &m, &n);

if(m % 2 != 0) m = m + 1;

if(m >= 6){

for(number=m; number <= n; number = number +2 ){

for(i = 3;i<= number/2;i=i+2)

if(prime(i)==1&& prime(number-i)==1){

printf("%d=%d+%d ",number,i,number-i);

count++;

if(count%5==0) printf(" ");

break;

}

}

}

}

int prime(int m)

{int i, n;

if(m == 1) return 0;

n = sqrt(m);

for(i = 2; i <= n; i++)

if(m%i == 0) return 0;

return 1;

}

第三篇:C语言验证哥德巴赫猜想

验证哥德巴赫猜想 #include int isprime(int n)/*判断n是否为素数的函数*/ { int j,x; for(j=2;j

#include int f(int n) { int i; for(i=2;i

第四篇:C语言验证哥德巴赫猜想

C语言验证哥德巴赫猜想(100以内)

#include "stdafx.h"

#include "stdio.h"

int ss(int i)

{

int j;

if (i <= 1)

return 0;

if (i == 2)

return 1;

for (j = 2; j < i; j++)

{

if (i % j == 0)

return 0;

else if (i != j + 1)

continue;

else

return 1;

}

}

int main()

{

int i, j, k, flag1, flag2, n = 0;for (i = 6; i < 100; i += 2)

} {} return 0; for (k = 2; k <= i / 2; k++) {} j = i - k; flag1 = ss(k); if (flag1) {} flag2 = ss(j);if (flag2) {} printf("%3d=%3d+%3d,", i, k, j); //输出结果 n++; if (n % 5 == 0)//每个数自动换一行 printf(" ");//调用ss函数判断另一个数是否为素数 //如果都是素数//调用ss函数判断当前数是否为素数//循环判断是否为素数//如果等于返回//如果小于等于返回

第五篇:哥德巴赫猜想的证明方法

探索者:王志成

人们不是说:证明哥德巴赫猜想,必须证明“充分大”的偶数有“1+1”的素数对,才能说明哥德巴赫猜想成立吗?今天,我们就来谈如何寻找“充分大”的偶数素数对的方法。

“充分大”的偶数指10的500次方,即500位数以上的偶数。因为,我没有学过电脑,也不知道大数的电脑计算方法,所以,我只有将“充分大”的偶数素数对的寻找方法告诉大家,请电脑高手帮助进行实施。又因为,人们已经能够寻找1000位数以上的素数,对于500位数以内的素数的寻找应该不是问题,所以,“充分大”的偶数应该难不住当今的学术界。

“充分大”的偶数虽然大,我认为:我们只须要寻找一个特定的等差数列后,再取该数列的1000项到2000项,在这2000个数之内必然能够寻找到组成偶数素数对的素数。下面,我们进行简单的探索,从中寻找到具体方法。

我们以偶数39366为例,进行探索,按照本人的定理:在偶数内,既不能被素因子整除,也不与偶数除以素因子的余数相同的数(自然数1除外),必然能够组成偶数的素数对。

这里所说的素因子,指小于偶数平方根的素数,√39366≈198,即小于198的素数为偶数39366的素因子。

一、初步探索,

1、素因子2,39366/2余0,当然,任何偶数除以2都余0,素数2把自然数分为:1+2N和2+2N,除以2余0的数和与偶数除以素因子2的余数相同的数都是2+2N数列中的数,剩余1+2N数列中的数为哥德巴赫数的形成线路;

2、素因子3,39366/3余0,素数3把1+2N数列分为:1+6N,3+6N,5+6N,除以3余0的数和与偶数除以素因子3的余数相同的数都是3+6N数列中的数,剩余1+6N,5+6N,两个数列中的数为哥德巴赫数的形成线路;

3、素因子5,39366/5余1,我们对上面剩余的两个数列任意取一个数列1+6N,取与素因子相同的项,5个项有:1,7,13,19,25。在这5个项中,必然有一个项除以5余0,必然有一个项除以素因子的余数与偶数除以素因子的余数相同,必然剩余素因子5减去2(不能被素因子整除的,为素因子减去1)个项,即5-2=3个项既不能被素因子整除,也不与偶数除以素因子的余数相同的数。剩余7,13,19,以前面的素因子乘积2*3*5为公差,组成3个哥德巴赫数的形成线路:7+30N,13+30N,19+30N。后面只取3个项,至少有一个项。

4、素因子7,39366/7余5,我们任意取7+30N的3个项有:7,37,67,这3个数中37,67,既不能被素因子整除,也不与偶数除以素因子的余数相同的数。即37+210N和67+210N两条线路都可以,

5、素因子11,39366/11余8,我们取37+210N的3个项:37,247,457,这3个数,既不能被素因子整除,也不与偶数除以素因子的余数相同的数。组成3个数列:37+2310N,247+2310N,457+2310N。

7、素因子13,39366/13余2,因为,下一个公差为2*3*5*7*11*13=30030,39366/30030≈1,不能组成与素因子13相同的13个项,寻找组成偶数的素数对的素数,在取最后一个公差的等差数列时,不能取与素因子相同项数时,最少必须取素因子1/2以上的项。我们取247+2310N数列在偶数1/2之内的数有:247,2557,4867,7177,9487,11797,14107,16417,18727。

从素因子13到197,虽然还有40个素因子进行删除,但是,大家不要怕,它们的删除率是相当低的,所以,在这些数中必然有能够组成偶数素数对的素数存在。

素因子13,删除能被13整除的数247,删除除以13与39366除以13余数相同的数14107; 素因子19,删除除以19与39366除以19余数相同的数11797;

素因子31,删除能被31整除的数4867;

素因子53,删除能被53整除的数9487,删除除以53与39366除以53余数相同的数16417;

素因子61,删除能被61整除的数18727。

最后,剩余2557和7177两个数,必然能组成偶数39366的素数对。

探索方法

二、

1、寻找等差数列的公差,令偶数为M、公差为B,我们已知该题的公差为2310,2310=2*3*5*7*11,大于11的下一个素数为13,用13/2=6.5,那么,公差的要件为: M/B>6.5,即大于7个项,主要是既要取最大的公差,又要确保不低于下一个素因子的1/2个项。我们就选择2310为该偶数的公差。

2、寻找等差数列的首项,令首项为A,A的条件为:既不能被组成公差的素数2,3,5,7,11整除,也不与偶数除以2,3,5,7,11的余数相同,还必须在公差2310之内;

(1)、不能被2,3,5,7,11整除的数有:在2310之内,大于或等于13的素数;自然数1;由大于或等于13的素因子与大于或等于13的素因子所组成的合数。为了方便起见,我们在这里取大于或等于13的素因子。

(2)、A除以2,3,5,7,11的余数不与偶数39366除以2,3,5,7,11的余数相同。因39366-13=39353,39353分别除以2,3,5,7,11不能整除,故13除以2,3,5,7,11的余数不与偶数39366除以2,3,5,7,11的余数相同,可以定为首项,得该等差数列为13+2310N。

取等差数列13在M/2的项有:13,2323,4633,6943,9253,11563,13873,16183,18493。当然,你也可以取该数列在偶数内的所有项,但是,当你全盘计算该偶数素数对时,取所有项必然形成与对称数列的计算重复,该数列的对称数列:因2310-13=2297,13不能被2,3,5,7,11整除,除以2,3,5,7,11的余数不与偶数39366除以2,3,5,7,11的余数相同,那么,对称数2297也必然满足这些条件,2297+2310N同样是产生素数对的等差数列。

3、在上面的9上项中,去掉合数:2323,4633,6943,9253,11563,

4、再去掉除以后面40个素因子余数与偶数除以这40个素因子余数相同的数,也就是对称数是合数的数:13,13873,16183,剩余18493必然能够组成偶数39366的素数对。

简单地谈一下素数生成线路与哥德巴赫数的生成线路的区别:

1、素数生成线路,我们仍然以2310为公差,在2310之内不能被2,3,5,7,11整除的数有:2310*(1/2)*(2/3)*(4/5)*(6/7)*(10/11)=480个,我们可以用这480个数为首项,以2310为公差组成480个等差数列,为偶数39366内的素数生成线路。对于相邻的偶数39364和39368来说,素数的生成线路是一样的。

2、我们把能够组成偶数素数对的素数称为哥德巴赫数,偶数39366的哥德巴赫数生成

线路,以2310为公差,在2310之内,既不能被2,3,5,7,11整除,也不与偶数39366除以2,3,5,7,11的余数相同的数有:2310*(1/2)*(2/3)*(3/5)*(5/7)*(9/11)=270个,即偶数39366以2310为公差的哥德巴赫数生成线路为270条,在2310内的这270个数又是与2310/2=1155完全对称的,如果全盘进行计算必然重复,故,也可以看成是270/2=135条完整的哥德巴赫数形成线路,而素数生成线路是不会重复的。

而偶数39364的哥德巴赫数生成线路,在2310之内既不能被2,3,5,7,11整除,也不与偶数除以2,3,5,7,11的余数相同的数有:2310*(1/2)*(1/3)*(3/5)*(5/7)*(9/11)=135,为135条线路,只有偶数39366的1/2。区别在于偶数39366能够被素因子3整除,为乘以2/3,偶数39364不能够被素因子3整除,为乘以1/3,即能够整除的素因子X,为乘以(X-1)/X,不能够整除的素因子Y,为乘以(Y-2)/Y,所以,偶数39366的素数对相当于偶数39364的素数对的2倍。

对于“充分大”的偶数的估算:充分大的偶数为500位数,素数对个数,根据《哥德巴赫猜想的初级证明法》中,当偶数大于91时,偶数的素数对个数不低于K(√M)/4,估计当偶数大于500位时,K的值为4*10的10次方,得充分大的偶数的素数对个数不低于260位数,用500位数的偶数除以260位数的数,得充分大的偶数平均240位数个数字中,有一个素数对的存在。如果我们直接进行寻找,相当于大海捞针。

如果,我们按照上面的方法二进行寻找,公差应为496位数,估计素数2*3*5*7*„*1283为496位数,从素数1289到2861之内,有素数除以素因子2,3,5,7,„,1283的余数不与偶数除以这些素因子的余数相同的数存在,存在的这个数可以作为等差数列的首项,2*3*5*7*„*1283的积作为等差数列的公差,取1289项,即1289个数,在这1289个数中,应该有能够组成500位数的偶数的1+1的素数对的素数存在。

难易度分析

寻找“充分大”偶数的一个“1+1”素数对与验证1000位数以上的一个素数相比较,到底哪一个难度小。

人类已经能够寻找并验证1000位数以上的素数,到底人们使用的什么办法,我虽然不知道,但有一点可以肯定:都涉及素数,如果是简单的方法,那么,都是简单方法;如果是笨办法,那么,都用笨办法。我们在这里采用笨办法进行比较:

充分大的偶数指500位数的数,与1000位数的素数相比,相差500位数。1000位数的数开平方为500位数,我们以位数相差一半的数为例进行分析。

100000000与10000相差一半的位数。笨办法是:要验证100000000以上的一个素数,假设要验证的这个数开平方约等于10000,必须要用这个数除以10000之内的素数,不能被这之内所有的素数整除,这个数才是素数。因为,10000内共有素数1229个,即必须做1229个除法题,才能得知这个数是不是素数。说个再笨一点的办法,假设我们不知道10000之内的素数,能否验证100000000以上的这个数是不是素数呢?能,那就是用这个数除以10000内的所有数,不能被这之内所有的数整除,也说明这个数是素数。(之所以说,这两种办法是笨办法,当我们知道10000内的所有素数时,要寻找100000000内的所有素数,不是用除法,而是用乘法,步骤最多只占第一种笨办法的1%,详见本人的《素数的分布》中所说的方法)。

当我们寻找偶数10000的一个素数对,须要多少个运算式?

我们知道:2*3*5*7*11=2310,10000/2310≈4,13/2=6.5,按理说应该取等差数列的7项以上,这里可以取4个项,接近应取数。我们基本上可以使用这个公差。这里的计算为5个计算式,简称5步;

大于11的素数,从13开始,寻找等差数列的首项,我们用(10000-13)分别除以2,3,5,7,11。能被3整除,除到3为止,一个减法,两个除法,为3步;

素数17,(10000-17)分别除以2,3,5,7,11。不能整除,可以用17为等差数列的首项,组成等差数列:17+2310N。为6步;

数列17+2310N在10000内有:17,2327, 4637,6947,9257,为4步;

计算素因子,√10000=100,素因子为100之内的素数,除2,3,5,7,11外,还剩13 ,17 ,19 ,23 ,29,31 ,37 ,41 ,43, 47, 53 ,59 ,61, 67 ,71,73 ,79 ,83, 89, 97,为20个素因子。为1步;

用10000分别除以这20个素因子,把余数记下来。为20步;

用17分别除以这些素因子,当除到67时余数与10000除以67余数相同,为14步; 用2327分别除以这些素因子,当除到13时余数为0,为1步;

用4637分别除以这些素因子,当除到31时余数与10000除以31余数相同,为6步; 用6947分别除以这些素因子,当除到43时余数与10000除以43余数相同,为9步; 用9257分别除以这些素因子,既不能整除,也不与10000除以这些素因子的余数相同,奇数9257必然能组成偶数10000的素数对。为20步。

总计为:102步计算式。而验证100000000以上的一个素数须要1229步计算式相比,结论为:寻找10000的一个素数对比验证100000000以上的一个素数简单。也就是说,寻找一个500位数偶数1+1的素数对,比验证一个1000位数以上的素数容易。

寻找500位数偶数的素数对,因为,2*3*5*7*11*„*1283左右,其乘积为493到496位数,下一个素数可能为1289左右,1289/2=644.5。才能满足取下一个素因子的值的1/2以上个项,当然,能够取到1289个项以上更好,更容易寻找到偶数的素数对。

敬请世界电脑高手验证,充分大的偶数必然有1+1的素数对存在,哥德巴赫猜想必然成立。

四川省三台县工商局:王志成

本文来自 99学术网(www.99xueshu.com),转载请保留网址和出处

上一篇:工程造价咨询报告书下一篇:工程质量通病与措施