Problem Description
把一个偶数拆成两个不同素数的和,有几种拆法呢?
Input
输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
Output
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
Sample Input
30 26 0
Sample Output
3
2
对于这题就是用筛选法打印素数表,然后枚举判断
代码:

3
2
对于这题就是用筛选法打印素数表,然后枚举判断
代码:
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int prime[10000+10];
void init()
{
memset(prime,1,sizeof(prime));
for(int i=2;i<=10000;++i){
if(prime[i])
for(int j=i*i;j<=10000;j+=i)
prime[j] = 0;
}
}
int main(void)
{
int n;
init();
while(~scanf("%d",&n),n)
{
int ans = 0;
for(int i=2;i<=n/2-1;++i)
if(prime[i]&&prime[n-i])
ans++;
cout<<ans<<endl;
}
return 0;
}