分拆素数和
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 38969 Accepted Submission(s): 17040
Problem Description
把一个偶数拆成两个不同素数的和,有几种拆法呢?
Input
输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
Output
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
Sample Input
30 26 0
Sample Output
3 2
分析:水题不解释,在这里介绍一种接近线性的打表方式;
代码如下:
#include<stdio.h>
#include<string.h>
#define N 10005
bool a[N];
int p[N];
void Prime()
{
memset(a,0,sizeof(a));
int num=0,i,j;
for(i=2;i<N;i++){
if(!a[i]){
p[num++]=i;
}
for(j=0;(j<num&&i*p[j]<N);++j){
a[i*p[j]]=1;
if(!(i%p[j]))
break ;
}
}
}
int main()
{
int n,cnt;
Prime();
a[0]=1;a[1]=1;
while(scanf("%d",&n),n)
{
cnt=0;
for(int i=1;i<n/2;i++)
{
if(a[i]==0 && a[n-i]==0)
cnt++;
}
printf("%d\n",cnt);
}
return 0;
}