プロジェクトオイラーの問題50を試しています。 (レベル2に近い:D)はこのように行く:、6つの連続素数の和としてプロジェクトのオイラーを間違って出力する50
素数41書くことができる。
41 = 2 + 3 + 5 + 7 + 11 + 13
これが最も長いです100を下回る素数に加算する連続素数の和。 素数を加えた1000未満の連続する素数の最長の和は、21項を含み、953に等しい。 最も連続する素数の合計として100万未満の素数はどれくらい書くことができますか?基本的にはそれだけで1000000までのすべての素数のベクトルを作成し、正しい答えを見つけるそれらをループ
#include <iostream> #include <vector> using namespace std; int main(){ vector<int> primes(1000000,true); primes[0]=false; primes[1]=false; for (int n=4;n<1000000;n+=2) primes[n]=false; for (int n=3;n<1000000;n+=2){ if (primes[n]==true){ for (int b=n*2;b<100000;b+=n) primes[b]=false; } } int basicmax,basiccount=1,currentcount,biggermax,biggercount=1,sum=0,basicstart,basicend,biggerstart,biggerend; int limit=1000000; for (int start=2;start<limit;start++){ //cout<<start; sum=0; currentcount=0; for (int basic=start;start<limit&&sum+basic<limit;basic++){ if (primes[basic]==true){ //cout<<basic<<endl; sum+=basic;currentcount++;} if (primes[sum]&¤tcount>basiccount&&sum<limit) {basicmax=sum;basiccount=currentcount;basicstart=start;basicend=basic;} } if (basiccount>biggercount) {biggercount=basiccount;biggermax=basicmax;biggerend=basicend;biggerstart=basicstart;} } cout<<biggercount<<endl<<biggermax<<endl; return 0; }
:
は、ここに私のコードです。答えは997651であり、カウントは543になるはずですが、私のプログラムはそれぞれ997661と546を出力します。何が間違っているのでしょうか?
どのような恥ずかしい間違い。あなたを困らせて申し訳ありません。ヒントもありがとうございます。 – cortex
私は「1分ルール」があり、鉱山は約1.7秒で実行されると思います。 – cortex