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

//何为哥德巴赫猜想?且看我维基百科的结果

任一大于2的偶数,都可表示成两个素数之和。

这个猜想与当时欧洲数论学家讨论的整数分拆问题有一定联系。整数分拆问题是一类讨论“是否能将整数分拆为某些拥有特定性质的数的和”的问题,比如能否将所有整数都分拆为若干个完全平方数之和,或者若干个完全立方数的和等。而将一个给定的偶数分拆成两个素数之和,则被称之为此数的哥德巴赫分拆。例如,

4 = 2 + 2

6 = 3 + 3

8 = 3 + 5

10 = 3 + 7 = 5 + 5

12 = 5 + 7

14 = 3 + 11 = 7 + 7

换句话说,哥德巴赫猜想主张每个大于等于4的偶数都是哥德巴赫数——可表示成两个素数之和的数。

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

 

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值