猜想:任何一个大于2的偶数都可以写成两个质数之和
数值验证:
#include<cstdio>
#include<cstdlib>
#include<cstring>
int f(int n,int prime[])
{
int i,j;
for(i=2;i<=n;i++)
prime[i]=1;
prime[0]=prime[1]=0;
for(i=2;i*i<=n;i++)
{
if(prime[i]==1)
{
for(j=2*i;j<=n;j+=i)
prime[j]=0;
}
}
}
int main()
{
int n,flag;
int *prime;
printf("哥德巴赫猜想验证\n");
printf("输入一个想验证的最大数n(n>=6):");
scanf("%d",&n);
if(n<6)
{
printf("数据输入错误!\n");
return 0;
}
if(!(prime=(int *)malloc(sizeof(int)*n)))//欲分配n个空间
{
printf("分配内存失败!\n") ;
return 0;
}
f(n,prime);
for(int i=6;i<=n;i+=2)//从6开始,循环验证各偶数
{
flag=1;
for(int j=2;j<=i/2;j++)//判断组成每个数的的加数
{
if(j%2==0||((i-j)%2==0)) continue;//若其中一个加数为偶数,不判断素数
if(prime[j]==1&&prime[i-j]==1)
{
printf("%d=%d+%d\n",i,j,i-j);
flag=0;
break;
}
}
if(flag==1)
printf("找到一个不符合要求的偶数\n");
}
return 0;
}
<pre name="code" class="cpp">//素数打表
#include<cstdio>
#include<cstdlib>
#include<cstring>
int f(int n,int prime[])
{
for(int i=2;i<=n;i++)
prime[i]=0;
prime[0]=1;prime[1]=1;
for(int i=2;i<=n;i++)
{
if(prime[i]==1) continue;
for(int j=2*i;j<=n;j+=i)
prime[j]=1;
}
}
int main()
{
int n,flag;
int *prime;
printf("哥德巴赫猜想验证\n");
printf("输入一个想验证的最大数n(n>=6):");
scanf("%d",&n);
if(n<6)
{
printf("数据输入错误!\n");
return 0;
}
if(!(prime=(int *)malloc(sizeof(int)*n)))//欲分配n个空间
{
printf("分配内存失败!\n") ;
return 0;
}
f(n,prime);
for(int i=6;i<=n;i+=2)//从6开始,循环验证各偶数
{
flag=1;
for(int j=2;j<=i/2;j++)//判断组成每个数的的加数
{
if(j%2==0||((i-j)%2==0)) continue;//若其中一个加数为偶数,不判断素数
if(prime[j]==0&&prime[i-j]==0)
{
printf("%d=%d+%d\n",i,j,i-j);
flag=0;
break;
}
}
if(flag==1)
printf("找到一个不符合要求的偶数\n");
}
return 0;
}