您的位置:首页 > 其它

HDU 2098 分拆素数和

2016-12-28 20:41 197 查看
把一个偶数拆成两个不同素数的和,有几种拆法呢?

Input输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
Output对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
Sample Input
30
26
0


Sample Output
3
2

简单题,日常一水
#include<cstdio>
const int N=1e4+10;
int f
,p
,t,n;

void init()
{
f[1]=1; t=0;
for (int i=2;i<N;i++)
{
if (!f[i]) p[t++]=i;
for (int j=0;j<t&&p[j]*i<N;j++)
{
f[p[j]*i]=1;
if (i%p[j]==0) break;
}
}
}

int main()
{
init();
while (~scanf("%d",&n),n)
{
int cnt=0;
for (int i=0;i<t;i++)
{
if (p[i]+p[i]>=n) break;
if (!f[n-p[i]]) cnt++;
}
printf("%d\n",cnt);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: