素数筛选法
#include <iostream>
using namespace std;
const __int64 MAX = 1000000;
__int64 pr[MAX], pn, num[MAX];
bool notp[MAX];
void getprime() {
__int64 i, j;
pn = 0;
for(i = 0; i < MAX; i++) {
notp[i] = 0;
}
for(i = 2; i < MAX; i++) {
if(!notp[i]) {
pr[pn++] = i;
}
for(j = 0; j < pn && pr[j] * i < MAX; j ++) {
notp[pr[j] * i] = 1;
if(i % pr[j] == 0) {
break;
}
}
}
}
int main()
{
int n, sum, temp, i, j;
bool flag;
getprime();
while(cin >> n && n != 0) {
flag = false;
for(i = 0; pr[i] <= n/2 && i < pn; i++) {
temp = n - pr[i];
if(notp[temp] == false) {
cout << n << " = " << pr[i] << " + " << temp << endl;
flag = true;
break;
}
}
if(!flag) {
cout << "Goldbach's conjecture is wrong." << endl;
}
}
return 0;
}