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\n"); 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\n",count); }}