//http://acm.hdu.edu.cn/showproblem.php?pid=2098 //标准的筛选法 #include<iostream> using namespace std; bool prime[10000+5]; //题目中给出了数值不会超过10000,这样刚好能够用筛选法 void Init() //直接初始化素数表就好了。 { for(int i = 2; i <= 10000; ++i) //初始条件为都是素数 { prime[i] = true; } for(int i =2;i <= 10000; ++i) //然后用是素数的去划除非素数。 { if(prime[i] == true) { for(int j = 2; i*j <= 10000; ++j) prime[i*j] = false; } } } int main() { int num, count, i; Init(); while(scanf("%d",&num)!=EOF && num!=0) { count = 0; for(i=2; i<=num/2; ++i) //对于每一个偶数 { //如果i和num-i都是素数(i!=num-i),且他们的和为num ,就符合条件了 if(prime[i] == true && prime[num-i] == true && i!=num-i) count++; //*****************************************************************/ } printf("%d ",count); } return 0; }