证明不小于6的偶数都是两个素数之和
2015-05-10 13:05
295 查看
所谓哥德巴赫猜想,是指哥德巴赫在教学中发现,每个不小于6的偶数都是两个素数之和。大家都相信这个猜想是正确的,但不能证明。
对于哥德巴赫猜想的验证,算法很简单,其基本思路是:设n为大于等于6的一个偶数,可将其分解为n1和n2两个数,分别检查n1和n2是否为素数,如都是,则在该数得到验证。若n1不是素数,就不必再检查n2是否素数。先从n1=2开始,检验n1和n2(n2=n-n1)是否素数。然后使n1+2再检验n1、n2是否素数……,直到n1=n/2为止。
对于哥德巴赫猜想的验证,算法很简单,其基本思路是:设n为大于等于6的一个偶数,可将其分解为n1和n2两个数,分别检查n1和n2是否为素数,如都是,则在该数得到验证。若n1不是素数,就不必再检查n2是否素数。先从n1=2开始,检验n1和n2(n2=n-n1)是否素数。然后使n1+2再检验n1、n2是否素数……,直到n1=n/2为止。
int PrimeNum(int i) //判断数i是否为质数 { int j,flag=1; for(j=2;j*j<=i-1;j++) //循环除以每个数 { if(i%j==0) //i能被j整除,表示不是质数 { flag=0; break; } } return flag; //返回结果 } int main() { int n,i,j,flag;for(i=6;i<=n;i+=2) //从6开始,循环验证各偶数 { flag=1; for(j=2;j<=i/2;j++) //判断组成每个数的两个加数 { //如果有一个加数是偶数则不判断 if(j%2==0 || ((i-j)%2==0)) continue;//若一个加数是偶数,不进行素数判断 if(PrimeNum(j) && PrimeNum(i-j)) //若两个加数都是素数 { printf("%d=%d+%d\n",i,j,i-j);//输出素数 flag=0; //清除标志 break; } } if(1==flag)//若某个偶数不是由两个奇数组成 printf("找到一个不符合要求的偶数:%d\n",j); } getch(); return 0; }
相关文章推荐
- 哥特巴赫猜想 每个不小于6的偶数都是两个奇素数之和
- 验证任意一个大于4并且小于500的偶数都可以拆分成两个素数之和
- <2013.3.22>歌德巴赫猜想-证明1到2000的偶数都能拆成两个素数。
- Console-算法-一个偶数总能表示为两个素数之和
- 华为oj 查找组成一个偶数最接近的两个素数
- 质数的判断然后随机的找到一个偶数等于两个素数的和
- 将一个偶数分解为两个素数的和并打印
- 偶数分解成两个素数之和
- 【华为 OJ 】查找组成一个偶数最接近的两个素数
- 偶数分解成两个素数的和
- 查找组成一个偶数最接近的两个素数
- 华为oj初级 查找组成一个偶数最接近的两个素数
- 查找组成一个偶数最接近的两个素数
- 哥德巴赫猜想: 任何一个大于2的偶数都可以拆分为两个素数的和
- 【程序44】 题目:一个偶数总能表示为两个素数之和。
- 【华为OJ】【079-查找组成一个偶数最接近的两个素数】
- 歌德巴赫猜想的C语言和Java语言版源程序(给出任何一个大于6的偶数写出两个素数之和)
- 【在线等急急急!】相差为2的两个素数称为孪生素数。例如,3与5,41与43等都是孪生素数。设计程序求出指定区间上的所有孪生素数对。区间上限和下限由键盘获取。
- 【华为OJ】查找组成偶数最接近的两个素数
- 一个偶数总能表示为两个素数之和。