哥德巴赫猜想:大于2的偶数都可以写成两个质数之和
#include<stdio.h>
#include<string.h>
#define MAX 1000000
int prime[MAX]; //声明为全局变量方便访问
void checkprime(int n); //用埃拉托色尼筛法找出素数 (详见https://blog.csdn.net/qq_45472866/article/details/104051475)
int main(){
int i, j, flag, cnt;
checkprime(MAX); /* 筛选出素数 */
cnt = 0;
for(i = 6; i <= MAX; i += 2){
flag = 1;
for(j = 2; j <= i / 2; j++)
if(prime[j] && prime[i - j]){ /* 判断两个和为i的数是不是都是素数 */
cnt++;
printf("%d + %d = %d%s", i - j, j, i, cnt % 5 ? " " : "\n");
flag = 0;
break;
}
if(flag) //flag != 0说明有一个偶数不符合
printf("有一个偶数不符合\n");
}
}
void checkprime(int n){
int i, j;
for(i = 0; i < n; i++)
prime[i] = 1;
for(i = 2; i * i <= n; i++)
if(prime[i])
for(j = i; j * i < n; j++)
prime[j * i] = 0;
}