分拆素数和
Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 12 Accepted Submission(s) : 9
Problem Description
把一个偶数拆成两个不同素数的和,有几种拆法呢?
Input
输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
Output
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
Sample Input
30 26 0
Sample Output
3 2
Source
2007省赛集训队练习赛(2)
代码如下:
#include <iostream>
#include <cstdio>
using namespace std;
int prime[10010];
bool isprime[10010];
void do_prime()
{
int nprime = 0;
for(int i = 1; i < 10010; i ++)
isprime[i] = true;
isprime[1] = false;
for(int i = 2; i < 10010; i ++)
if(isprime[i])
{
prime[nprime++] = i;
for(int j = i*i; j < 10010; j+=i)
{
isprime[j] = false;
}
}
}
int main()
{
int n ;
do_prime();
while(scanf("%d",&n),n)
{
int res = 0;
for(int i = 0; prime[i]< n/2; i ++)
{
if(isprime[n-prime[i]])res ++;
}
printf("%d\n",res);
}
return 0;
}