验证一百万以内的哥德巴赫猜想(C语言 + 详细注释)

哥德巴赫猜想:大于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;
}

 

发布了30 篇原创文章 · 获赞 10 · 访问量 407

猜你喜欢

转载自blog.csdn.net/qq_45472866/article/details/104051584