任一充分大的偶数都可以表示成二个素数的和,或是一个素数和一个半素数的和。
数值验证: C语言
#include <stdio.h> #include <stdlib.h> #include <conio.h> // Eratosthenes算法 // 将指定范围中的素数都筛选出来保存到一个数组中。 int CreatePrime(int n, int prime[]) { int i,j; for(i=2; i<=n; i++)//初始化数组 prime[i] = 1;//标志为1表示对应的数是质数 prime[0]=prime[1]=0; for(i=2; i*i<=n; i++)//循环处理前i个 { if(prime[i] == 1)//若为素数标记 { for(j=2*i; j<=n; j++)//筛去合数 { if(j%i==0)//能被整除 prime[j]=0;//不是素数 } } } } int main() { int n,i,j,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))) { printf("分配内存失败!\n"); getch(); return 0; } CreatePrime(n, prime);//生成素数数组 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(prime[j]==1 && prime[i-j]==1) { printf("%d=%d+%d\n", i, j, i-j);//输出素数 flag = 0;//清除标志 break; } } if(1==flag) printf("找到一个不符合要求的偶数:%d\n", i); } getch(); return 0; }
运行结果: 找1000000以内的素数