第一篇:用C语言证明哥德巴赫猜想
用C语言证明哥德巴赫猜想
哥德巴赫猜想:任何一个大于6的偶数都可以写成两个素数的和。#include
#include
int main(void)
{
int number,a,b;
char c;
int i,j,k,l;
int sum,m;
system(“cls”);
printf(“enter your number:”);
scanf(“%d”,&number);
for(i=2;i<=number;i++)
{
sum=1;
for(j=2;j
{
if(i%j!=0)
{
sum=sum+1;
}
}
if(sum==(i-1))
{
if((i+1)==number)
{
a=i;
b=1;
printf(“%d=%d+%dn”,number,a,b);
}
else
{
for(k=2;k<=i;k++)
{
m=1;
for(l=2;l { if(k%l!=0) { m=m+1; } } if(m==(k-1)){if((i+k)==number&&i!=k){a=i;b=k;printf(“%d=%d+%dn”,number,a,b); } } } } system(“pause”); }} } 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(“n”);//调用ss函数判断另一个数是否为素数 //如果都是素数//调用ss函数判断当前数是否为素数//循环判断是否为素数//如果等于返回//如果小于等于返回 #include #include int is_prime(int); main(){ } //验证[a,b]区间内的整数是否符合猜想 int yanzhengGDBH(int a,int b){ } int gdbh(int n){//验证偶数n能否分解成两个素数 int a;a=3;while(a } } if(is_prime(a)){// 判断a是否是素数} a++;if(is_prime(n-a)){// 判断n-a是否是素数} printf(“OK!%d=%d+%dn”,n,a,n-a);return 1;printf(“gedebahe ,ni cuo le!n”);return 0; int is_prime(int n){//判断n是否是素数 } int i=2;if(n<2)return 0;while(i<=sqrt(n)){//2-根号n,找n的因子} return 1;//i是n的因子,不是素数 if(n%i==0){} i++;return 0;//i是n的因子,不是素数 验证哥德巴赫猜想 #include #include 哥德巴赫猜想的证明方法 探索者:王志成人们不是说:证明哥德巴赫猜想,必须证明“充分大”的偶数有“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的素数对存在,哥德巴赫猜想必然成立。 四川省三台县工商局:王志成第二篇:C语言验证哥德巴赫猜想
第三篇:c语言 哥德巴赫猜想2
第四篇:C语言验证哥德巴赫猜想
第五篇:哥德巴赫猜想证明方法