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;  
} 







posted on 2017-05-12 22:42  海岛Blog  阅读(169)  评论(0编辑  收藏  举报

导航