时间限制: 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;
}