时间限制: 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 ", count); } return 0; }