题目
给你一个整数n,如果可以由素数对构成,则输出素数对的个数,如10由(5,5)(3,7)构成,所以输出结果为2.
tips:先找出范围内的素数,使用标记的方法,查看n-素数结果还是不是素数,如果是,则计数+1.
代码
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=10000;
//flag[i]==1表i是素数
bool flag[maxn+5];
int prime[maxn+5];
//筛选法求maxn内所有素数
int get_prime()
{
for(int i=2;i<=maxn;i++)
{
if(!prime[i])
{
prime[++prime[0]]=i;
flag[i]=true;
}
for(int j=1;j<=prime[0] && prime[j]<=maxn/i; j++)
{
prime[prime[j]*i]=1;
if(i%prime[j]==0) break;
}
}
return prime[0];
}
int main()
{
get_prime();
int x;
while(scanf("%d",&x)==1 && x)
{
int ans=0;//方法数
for(int i=1;i<=prime[0] && prime[i]<= x/2-1;i++)
{
if(flag[x-prime[i]]) ans++;
}
printf("%d\n",ans);
}
return 0;
}