だから私はプロジェクトオイラーの問題50を試みています。(レベル2に非常に近い:D)次のようになります:
素数41は、6つの連続する素数の合計として記述できます。
41 = 2 + 3 + 5 + 7 + 11 + 13
これは、100未満の素数に追加される、連続する素数の最長の合計です。1000未満の連続する素数の最長の合計は、素数に追加され、21の項を含み、953に等しくなります。100万未満のどの素数を最も連続する素数の合計として記述できますか?
これが私のコードです:
#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;
}
基本的には、1000000までのすべての素数のベクトルを作成し、それらをループして正しい答えを見つけます。答えは997651で、カウントは543であるはずですが、私のプログラムはそれぞれ997661と546を出力します。何が悪いのでしょうか?