NUC1305 哥德巴赫猜想【筛选法】

 

哥德巴赫猜想

时间限制: 1000ms 内存限制: 65536KB

问题描述

对于任何偶数N大于或等于4 ,存在着至少一双素数P1和P2这样 N=P1+P2

 

 

输入描述

每行输入一个偶数,在4到215 之间。当输入0时结束输入

输出描述

每个输出行应只包含一个整数,输出对数。

样例输入

6
10
12
0

样例输出

1
2
1

 

 

 

问题分析:

这个题与《HDU1397 POJ2909 UVA686 UVALive5674 Goldbach's Conjecture(II)》几乎完全相同,只是输入值的范围不同,代码直接拿过来就可以了。

程序说明:

参见参考链接。

参考链接:HDU1397 POJ2909 UVA686 UVALive5674 Goldbach's Conjecture(II)

题记:

程序写多了,似曾相识的也就多了。

 

AC的C++程序如下:

 

 

/* HDU1397 POJ2909 UVA686 UVALive5674 Goldbach's Conjecture(II) */  
  
#include <iostream>  
#include <cmath>  
#include <cstdio>  
  
using namespace std;  
  
const int MAXN = 2000000;  
bool prime[MAXN+1] = {false, false, true};  
  
// 埃氏筛选法  
void esieve(bool sflag[], int n)  
{  
    // 初始化  
    for(int i=3; i<=n; i++) {  
        sflag[i++] = true;  
        sflag[i] = false;  
    }  
  
    // 筛选  
    int max = sqrt(n);  
    for(int i=3; i<=max; i++) {  
        if(sflag[i]) {  
            for(int j=i+i; j <= n; j+=i)  
                sflag[j] = false;  
        }  
    }  
}  
  
int main()  
{  
    esieve(prime, MAXN);  
  
    int n, count, i;  
  
    while(scanf("%d", &n) != EOF) {  
        // 判定结束条件  
        if(n == 0)  
            break;  
  
        // 计算素数对个数  
        count = 0;  
        for(i=2; i<=n/2; i++)  
            if(prime[i] && prime[n-i])  
                count++;  
  
        // 输出结果  
        printf("%d\n", count);  
    }  
  
    return 0;  
} 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值