http://acm.hdu.edu.cn/showproblem.php?pid=1397

和2136有共通之处,学习了构造素数表的方法,在这里初次使用。

按因子从小到大的顺序筛选,去掉2的倍数,去掉3的倍数......最后剩下的就是素数了。

View Code
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int prime[40000];
int main()
{
int n;
for(int i=2;i*i<32768;i++)
{
if(!prime[i])
{
for(int j=i;i*j<32768;j++)
prime[i*j]=1;
}
}
while(scanf("%d",&n),n)
{
int cnt=0;
for(int i=2;i<=n/2;i++)
if(prime[i]==0&&prime[n-i]==0)
cnt++;
printf("%d\n",cnt);
}
return 0;
}