JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで数値nを受け取り、最初のn個の素数を配列として生成する関数の実装方法

本記事では、数値 n を受け取り、最初の n 個の素数を格納した配列を返す JavaScript 関数の作成方法を解説します。素数とは、1 とその数自身でしか割り切れない数のことで、2、3、19、37、73 などが代表的な例です。

実装の手順としては、まず与えられた数が素数かどうかを判定する関数を用意し、その後ループ処理によって n 個の素数を順番に生成していきます。まずは素数を判定するコードから見ていきましょう。

素数を判定する関数

const isPrime = (n) => {
   for(let i = 2; i <= n/2; i++){
      if(n % i === 0){
         return false;
      }
   };
   return true;
};

この isPrime 関数は、2 から n ÷ 2 までの整数で順番に割り算を行い、1 つでも割り切れる値が存在すれば false(素数ではない)を返します。最後まで割り切れなければ true(素数)を返します。

最初の n 個の素数を生成する完全なコード

コード例

const isPrime = (n) => {
   for(let i = 2; i <= n/2; i++){
      if(n % i === 0){
         return false;
      }
   };
   return true;
};
const generatePrime = num => {
   const arr = [];
   let i = 2;
   while(arr.length < num){
      if(isPrime(i)){
         arr.push(i);
      };
      i = i === 2 ? i+1 : i+2;
   };
   return arr;
};
console.log(generatePrime(6));
console.log(generatePrime(16));
console.log(generatePrime(36));

generatePrime 関数のポイントは、i = i === 2 ? i+1 : i+2; の部分です。2 を判定した後は奇数のみを検証対象とすることで、処理を効率化しています。2 以外の偶数は必ず約数に 2 を持つため素数にならず、判定する必要がないからです。

実行結果

コンソールには以下のように出力されます。

[ 2, 3, 5, 7, 11, 13 ]
[
   2, 3, 5, 7, 11, 13,
   17, 19, 23, 29, 31, 37,
   41, 43, 47, 53
]
[
   2, 3, 5, 7, 11, 13, 17, 19, 23,
   29, 31, 37, 41, 43, 47, 53, 59, 61,
   67, 71, 73, 79, 83, 89, 97, 101, 103,
   107, 109, 113, 127, 131, 137, 139, 149, 151
]
  1. JavaScriptで配列の最初の要素と最後の要素を取得する方法

    配列とは、複数の要素をひとまとめにして管理するデータ構造です。各要素にはそれぞれ固有のインデックス番号が割り当てられており、このインデックスを使うことで任意の要素へアクセスできます。ただし、最後の要素に関しては、配列に含まれる要素数が分からなければインデックスも確定しないため、少し工夫が必要です。本記事では、これらの方法をわかりやすく解説します。 最初の要素へのアクセス JavaScriptでは配列のインデックスは「0」から始まるため、最初の要素の位置は常に分かっています。そのため、値の取得は非常に簡単です。配列を arr とすると、最初の要素の値は arr[0] で表されます。 サンプ

  2. JavaScriptのNumber()関数とは?使い方とサンプルコードを解説

    JavaScriptのNumber()関数は、引数として渡された値やオブジェクトを、それに対応する数値へ変換するための関数です。真偽値や文字列型の数字、さらにはDateオブジェクトなども数値に変換できるため、データ型の変換処理において非常に便利な組み込み関数の一つです。例えば、Number(true)は「1」、Number(false)は「0」を返します。また、数字のみで構成された文字列「149」を渡せば数値の149に変換され、new Date()で生成した日付オブジェクトを渡すと、1970年1月1日からの経過ミリ秒数が返されます。以下に、Number()関数の動作を確認できるサンプルコードを