http://acm.hdu.edu.cn/showproblem.php?pid=2098
用筛法标记素数,这道题就简单了。
不过有一点需要注意就是,要拆分成不同的素数,这就解释了为什么26这组数据输出2、
#include"stdio.h" #include"string.h" #include"stdlib.h" bool prime[10005]; void IsPrime() { int i,j,t; memset(prime,true,sizeof(prime)); prime[0]=prime[1]=false; prime[2]=true; prime[3]=true; for(i=4;i<=10000;i+=2) prime[i]=false; for(i=3;i<=100;i++) if(prime[i]) for(j=i*i;j<=10000;j+=2*i)//优化 prime[j]=false; } int main() { int n,count,i; IsPrime(); while(scanf("%d",&n)&&n) { if(n<=3) { printf("0 "); continue; } count=0; for(i=2;i<=n/2;i++) if(prime[i]==true&&prime[n-i]==true) { if(i!=n-i) count++; } printf("%d ",count); } }