kostumブログ

勉強したことやノート代わりのアウトプットに使っています。

project Euler 010

環境

問題

10以下の素数の和は 2 + 3 + 5 + 7 = 17 である. 200万以下の全ての素数の和を求めよ.

考え方

  1. 1 ~ 200万まで数え上げる
  2. 数え上げ数を 3 ~ 数え上げ数未満までの数字で剰余を計算する
  3. 剰余が0になった時、次の数え上げ数を計算する
  4. 剰余が一度も0にならなかった時、その数え上げ数は素数なので、配列に格納する
  5. 数え上げが全て終了したあと、配列に格納した素数リストの和を計算する

コード

let isSosu = true;
let sosuList = [2];
const max = 2000000;
let sum = 0;
for (let i = 3; i <= max; i = i + 1) {
  for (let j = 2; j <= Math.floor(Math.sqrt(i)); j = j + 1) {
    if (i % j == 0) {
      isSosu = false;
      break;
    } else { 
      isSosu = true;
    }
  }
  if (isSosu) {
    sosuList.push(i);
  }
}
sosuList.forEach(sosu => {
  sum = sum + sosu;
});
return sum;

説明

  • 素数かどうかの判定、素数リスト(2を入れておく)、最大値、和の変数を作成する
  • 3 ~ 最大値まで、for 文で数え上げる
  • その数え上げ数を、2 ~ 数え上げ数の平方根の整数までfor 文で数え上げる
  • 最初の数え上げ数を 2 番目の数え上げ数で割り、剰余が0の時、最初の数え上げ数は素数でないため、素数かどうかの判定を false にする。
  • 剰余が0でない状態が、 2 番目の数え上げのなかで一度もなければ、数え上げの終了後、素数かどうかの判定は true になる。
  • 2 番目の数え上げの最後に、素数かどうかの判定が true の場合、素数リストに最初の数え上げ数を格納する。
  • 最初の数え上げが終了したら、素数リストの全値を一つずつ取り出し、和に加える