译文描述
哥德巴赫猜想:对于任何大于或等于4的偶数n,至少存在一对素数p1和p2,使得n = p1 + p2。
这个猜想尚未得到证明或拒绝。没有人知道这个猜想是否真的成立。但是,对于给定的偶数,可以找到这样一对素数(如果有)。这里的问题是编写一个程序,该程序报告对于给定的偶数满足猜想条件的所有素数对的数量。
给出了偶数序列作为输入。对应于每个数字,程序应输出上述对数。请注意,我们对本质上不同的对的数量感兴趣,因此,您不应将(p1,p2)和(p2,p1)分别算作两个不同的对。
输入
每个输入行中都有一个整数。您可以假设每个整数都是偶数,并且大于或等于4且小于2 ^ 15。输入的结尾由数字0表示。
输出
每条输出线应包含一个整数。输出中不应出现其他任何字符。
样例输入 复制
<span style="color:#333333"><span style="color:#333333">4
10
16
0
</span></span>
样例输出 复制
<span style="color:#333333"><span style="color:#333333">1个
2
2
</span></span>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=32768+100;
const int N=10;
int prime[maxn],pNum;
bool p[maxn];
void findPrime(){
for(int i=2;i<maxn;i++){
if(p[i]==false){
prime[pNum++]=i;
for(int j=i+i;j<maxn;j+=i)
p[j]=true;
}
}
}
int main(){
findPrime();
int n;
while(scanf("%d",&n)!=EOF&&n){
int ans=0;
for(int i=2;i<=n/2+1;i++){
int t=n-i;
if(t>=i&&p[i]==false&&p[t]==false){
ans++;
}
}
printf("%d\n",ans);
}
return 0;
}