Project Euler 50
41 = 2 + 3 + 5 + 7 + 11 + 13.
100未満の素数を連続する素数の和で表したときにこれが最長になる.同様に, 連続する素数の和で1000未満の素数を表したときに最長になるのは953で21項を持つ.
100万未満の素数を連続する素数の和で表したときに最長になるのはどの素数か?
http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2050
#include <iostream> #include <deque> using namespace std; //素数を max まで計算する deque<bool> p; deque<int> prime; 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; } } for(int i=2 ; i<=max ; i++){ if(p[i]) prime.push_back(i); } } int main(){ calc_prime(1000000); int n=0, max=0, maxnum=0; for(int i=0 ; i<prime.size()-1 ; i++){ n = prime[i]; for(int j=1 ; ; j++){ n += prime[i+j]; if(n>1000000) break; if(p[n] && max<j+1){ max = j+1; maxnum = n; //cout << maxnum << endl; } } } cout << maxnum << endl; }
特にコメントすることがないなぁ・・・30分弱ぐらいでできました。