HDU2098
把一个偶数拆成两个不同素数的和,有几种拆法呢?
输入:
输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
输出:
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
输入样例:
30
26
0
输出样例:
3
2
思路
该题输入范围不大,我们可以打表,将一个长度为10001的数组初始化为0,然后将素数脚标的数组赋值为1,最后用暴力法枚举出方案数。
代码如下:
#include <cstdio>
using namespace std;
int num[10001] = {0};
void prime(){ //素数函数
int a = 10000, i, j;
for (i = 2; i <= a; i++){
for (j = 2; j <= i; j++){
if (i % j == 0)
break;
}
if (j >= i)
num[i] = 1;
}
}
int main(){
prime();
int a;
while(~scanf("%d", &a) && a != 0){
int t = 0;
for (int i = a; i >= a / 2; i--){
if (num[i] && num[a - i])
t = (i != a - i)? t + 1 : t;
}
printf("%d\n", t);
}
return 0;
}