Problem Description
把一个偶数拆成两个不同素数的和,有几种拆法呢?
Input
输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
Output
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
Sample Input
30
26
0
Sample Output
3
2
AC代码:
#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;
bool is_prime(int x) {
if (x == 1)return false;
int sqr = sqrt(1.0*x);
for (int i = 2; i <= sqr; i++) {
if (x%i == 0) {
return false;
}
}
return true;
}
int main() {
vector<int> vt;
for (int i = 2; i < 10010; i++) {
if (is_prime(i)) {
vt.push_back(i);
}
}
int n;
while (scanf_s("%d", &n) != EOF) {
int cnt = 0;
if (n == 0) {
break;
}
for (int i = 0; i < vt.size(); i++) {
for (int j = i + 1; j < vt.size(); j++) {
if (vt[i] + vt[j] == n) {
cnt++;
}
}
}
printf("%d\n", cnt);
}
return 0;
}