環境
問題
10以下の素数の和は 2 + 3 + 5 + 7 = 17 である. 200万以下の全ての素数の和を求めよ.
考え方
- 1 ~ 200万まで数え上げる
- 数え上げ数を 3 ~ 数え上げ数未満までの数字で剰余を計算する
- 剰余が0になった時、次の数え上げ数を計算する
- 剰余が一度も0にならなかった時、その数え上げ数は素数なので、配列に格納する
- 数え上げが全て終了したあと、配列に格納した素数リストの和を計算する
コード
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 の場合、素数リストに最初の数え上げ数を格納する。
- 最初の数え上げが終了したら、素数リストの全値を一つずつ取り出し、和に加える