把一个偶数拆成两个不同素数的和,有几种拆法呢?
Input
输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
Output
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
Sample Input
30 26 0
Sample Output
3 2
#include<stdio.h>
#include<math.h>
int main()
{
int a[100010],n,i,j,m;
for(i=3;i<=10000;i++)
{
a[i]=i;
}
for(i=2;i<=10000;i++)
{
for(j=2*i;j<=10000;j=j+i)
{
a[j]=0;
}
}
while(scanf("%d",&n)&&n!=0)
{
m=0;
for(i=3;2*i<n;i++)
if(a[i]+a[n-i]==n)
m++;
printf("%d\n",m);
}
return 0;
}
思路 这道题刚开始做了好几次 最后超时了 换了一种方法 关键的是 特殊情况 26可以分成13和13,这时要减1重复了 用了一个数组 和两层for循环就可以了