Problem Description
把一个偶数拆成两个不同素数的和,有几种拆法呢?
Input
输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
Output
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
Sample Input
30 26 0
Sample Output
3 2
http://www.cnblogs.com/OceanEyes/archive/2012/02/04/ACM2098.html
#include
const int maxn = 10005;
int is_prime[maxn];
int main(){
for(int i=0; i<maxn; i++)
is_prime[i] = 1;
is_prime[0] = is_prime[1] = 0;
for(int i=2; i*i<maxn; i++)
for(int j=i*2; j<maxn;j++)
if(is_prime[j] && j%i==0)
is_prime[j] = 0;
//先筛出10005内的素数,is_prime[i]==1表示i为素数
int n;
while(scanf("%d",&n),n){
int ans = 0;
for(int i=0; i<n/2; i++){//题目要求分解为不同素数,所以i不能等于n/2
if(is_prime[i] && is_prime[n-i])
ans++;
}
printf("%d\n",ans);
}
return 0;
}