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

JavaScriptで素数を生成する方法を解説!初心者向けサンプルコードと効率化のコツ

素数とは、1とその数自身でしか割り切れない、2以上の自然数のことです。JavaScriptで素数を生成する最もシンプルな方法は、試し割り法(trial division)と呼ばれる手法です。これは、ある数値が2からその数未満までのいずれかの整数で割り切れるかどうかを順番にチェックし、一度も割り切れなければ素数と判定するというものです。


ここでは、2〜20の範囲から素数を見つけ出して表示するサンプルコードを紹介します。

サンプルコード

<script>
// 2〜20の各数値について素数かどうかを判定
for (var limit = 2; limit <= 20; limit++) {
var isPrime = true;

// 2からlimit未満までの数で順に割ってみる
for (var i = 2; i < limit; i++) {
if (limit % i === 0) { // 割り切れたら素数ではない
isPrime = false;
break;
}
}

// 割り切れる数がなければ素数として出力
if (isPrime) {
document.write(limit + '<br>');
}
}
</script>

実行結果

2
3
5
7
11
13
17
19

コードのポイント解説

  • 外側のループ:判定対象となる数値(2〜20)を順番に取り出します。1は素数ではないため、開始値は2としています。
  • 内側のループ:2からその数未満までの整数で順番に割り、余りが0になる(=割り切れる)約数が存在するかを確認します。
  • break文:一つでも約数が見つかった時点で「素数ではない」と確定できるため、残りのチェックを中断して処理を効率化しています。
  • isPrimeフラグ:素数判定の結果を保持する変数で、trueのままループが終了すれば素数として出力されます。

もっと効率よく判定するには?

上記の方法でも十分動作しますが、大きな数を扱う場合はチェック範囲をその数の平方根までに絞ると大幅に高速化できます。ある数が約数を持つなら、必ず平方根以下の約数をペアとして持つためです。

// 内側のループをこのように書き換えるだけでOK
for (var i = 2; i * i <= limit; i++) {
if (limit % i === 0) {
isPrime = false;
break;
}
}

また、モダンな書き方としては、console.log()を使った関数形式にまとめると再利用しやすくなります。

function getPrimes(max) {
const primes = [];
for (let num = 2; num <= max; num++) {
let isPrime = true;
for (let i = 2; i * i <= num; i++) {
if (num % i === 0) {
isPrime = false;
break;
}
}
if (isPrime) primes.push(num);
}
return primes;
}

console.log(getPrimes(20));
// 結果: [2, 3, 5, 7, 11, 13, 17, 19]

まとめ

JavaScriptでの素数生成は、二重ループと剰余演算子(%)を組み合わせた「試し割り法」が基本です。まずはシンプルな実装で仕組みをしっかり理解し、慣れてきたら平方根までのチェックや関数化などの工夫を加えて、より効率的なコードを目指していきましょう。

  1. JavaScriptの数値(Number)の基本と実践サンプルコード

    JavaScriptでは、整数も小数もすべて「Number」型として扱われます。この記事では、数値変数の定義方法と、それらを使った簡単な演算の例を、動作するHTMLサンプルコードとともに紹介します。サンプルコード以下は、JavaScriptで数値を扱う基本的な例です。整数(22、99)と小数(1.523)を変数に格納し、ボタンをクリックすると画面に表示する仕組みになっています。<!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> <meta name=viewport co

  2. JavaScriptで小数を検証するには?正規表現を使った実装例を解説

    JavaScriptで小数を検証する方法 JavaScriptで、ユーザーが入力した値が正しい小数(小数点を含む数値)かどうかを判定したい場面はよくあります。そんなときに便利なのが正規表現です。本記事では、match()メソッドと正規表現を組み合わせて、入力値が小数かどうかを検証する方法を、具体的なコード例とともにわかりやすく解説します。 使用する正規表現パターン 今回の検証では、以下の正規表現を使用します。 /^[-+]?[0-9]+\.[0-9]+$/ このパターンの各要素の意味は次のとおりです。 ^[-+]?:文字列の先頭に符号(+ または -)が付いていても、付いていなくてもマッチ