yusijia’s blog hdu 2098

Contents

Problem Description

把一个偶数拆成两个不同素数的和,有几种拆法呢?

Input

输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。

Output

对应每个偶数,输出其拆成 不同 素数的个数,每个结果占一行。

Sample Input

30
26
0

Sample Output

3
2

分析:

这对素数的范围是[2, date / 2]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

#include <cstring>

int mark[10100];

int ()
{
memset(mark, 0, sizeof(mark));
for(int k = 2; k <= 10000; k++)if(mark[k] == 0){
for(int j = k + k; j <= 10000; j += k)
mark[j] = 1;
}
int data, sum;
while(scanf("%d", &data) != EOF && date){
sum = 0;
for(int i = date / 2; i >= 2; i--){
if(mark[i] == 0 && mark[data - i] == 0 && i != data - i)
sum++;
}
printf("%dn", sum);
}
return 0;
}