10以下の素数の和は 2 + 3 + 5 + 7 = 17 である.
200万以下の全ての素数の和を求めよ.
コンパイルが通らない方へ

上記の画像のように -std=c++11 を加えるとコンパイルが通りました。
ソースコード
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
int main() {
vector<int> prime = {2, 3};
int flag = 0;
for(int i = 5; i < 2 * pow(10, 6); i += 2) {
for(int p : prime) {
if(i % p == 0) {
flag = 1;
break;
}
}
if(flag == 0) {
//cout << i << endl;
prime.push_back(i);
}
flag = 0;
}
long long int sum = 0;
for(int i = 0; i < prime.size(); i++) {
//cout << prime[i] << " ";
sum += prime[i];
}
//cout << endl;
cout << sum << endl;
return 0;
}
/* 実行結果
142913828922
*/
今回はvectorに素数加えていきそのvector内の総和を求める方法をとりましたが、
もちろんvectorに加えずにその数字が素数とわかった時点でsumに加えてゆく方法もあります。
計算速度を上げる工夫としてただ単にfor文を回すだけでなくi += 2として偶数はとばして計算をしたり、もう素数ではないと分かった時点でbreakして余計な計算をしないようにしました。
あとは素数のvectorを作成してそのvector内でfor文を回しました。
今回は以上になります。
ではまた。
コメント