kostumブログ

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

project Euler 007

環境

問題

素数を小さい方から6つ並べると 2, 3, 5, 7, 11, 13 であり, 6番目の素数は 13 である. 10001 番目の素数を求めよ.

考え方

  1. 配列を作成し、10001 番目のインデックスを求めることで答えを得る
  2. while 文で素数を取り出し、1 の配列に格納する
  3. 配列の長さが 10001 になったら、while 文を離脱し、10001 番目の配列の値を取得する

コード

let array = [2];
let num = 3;
let isSosu = false;
let answerIndex = 10001;
while (true) {
  for (let i = 2; i < num; i = i + 1) {
    if (num % i == 0) {
      isSosu = false;
      break;
    } else {
      isSosu = true;
    }
  }
  if (isSosu) {
    array.push(num);
  }
  if (array.length === answerIndex) {
    break;
  }
  num++;
}
return array[answerIndex - 1];

説明

  • 素数を格納する配列を作成する
  • +1 していく数え上げ数を作成する
  • 素数かどうかを判定するための変数を作成する
  • 求めたい番号を定数として設定する
  • 計算しにくい 2 を、その配列の中に入れておく
  • 数え上げ数を、2から数え上げ数未満までの間の数で割り、割り切れた数字が出た時点で、その数は素数でないのでループを離脱する。
  • 割り切れる数字がなかったとき、数え上げ数は素数なので、素数を格納する配列に加える
  • この配列の長さが求めたい番号に等しくなった時、数え上げを止める
  • 配列のインデックスは、0 から始まることに注意して、求めたい番号のインデックスの配列を取得する