猜想:任何一个大于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; }