[C++] プロジェクトオイラー Problem10

C++

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文を回しました。

今回は以上になります。

ではまた。

コメント

タイトルとURLをコピーしました