把一个偶数拆成两个不同素数的和,有几种拆法呢?
Input
输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
Output
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
Sample Input
30
26
0
Sample Output
3
2
解题思路:
先10000以内素数打表,然后再从2开始遍历到n/2。注意题目中要求素数大小不相等,所以不能取到n/2。
#include<stdio.h>
#include<memory.h>
int prime[10005];
void init()
{
memset(prime,0,sizeof(prime));
prime[1]=1;
for(int i=2;i<=10000;i++)
{
if(prime[i]==0)
{
for(int j=2*i;j<=10000;j+=i)
{
prime[j]=1;
}
}
}
}
int main()
{
int n,cnt;
init();
while(1)
{
scanf("%d",&n);
if(n==0) return 0;
cnt=0;
for(int i=2;i<n/2;i++)
{
if(prime[i]==0&&prime[n-i]==0)
{
cnt++;
}
}
printf("%d\n",cnt);
}
}