Project Euler 46
Christian Goldbachは全ての奇合成数は平方数の2倍と素数の和で表せると予想した.
9 = 7 + 2×1^2
http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2046
15 = 7 + 2×2^2
21 = 3 + 2×3^2
25 = 7 + 2×3^2
27 = 19 + 2×2^2
33 = 31 + 2×1^2
後に, この予想は誤りであることが分かった.
#include <iostream> #include <deque> using namespace std; //素数を max まで計算する deque<bool> p; void calc_prime(const int max){ for(int i=0 ; i<max+1 ; i++){ p.push_back(true); } p[0] = false; p[1] = false; double myEnd = sqrt(double(max)); for(int i=2 ; i < myEnd ; i++){ for(int j=2 ; i*j<=max ; j++){ p[i*j] = false; } } } int main(){ const int pmax=100000; calc_prime(pmax); int k=0; bool isGoldbach=false; for(int i=3 ; i<pmax ; i+=2){ if(p[i]){ cout << i << endl; continue; } isGoldbach = false; for(int j=1 ; ; j++){ k = i - 2*j*j; if(k<0) break; if(p[k]){ cout << i << " = " << k << "+ 2*" << j << "^2" << endl; isGoldbach = true; break; } } if(!isGoldbach){ cout << endl << i << endl; break; } } }