【JavaScript】数値が素数かどうかを判定する方法とサンプルコード
素数とは
素数(そすう・プライム)とは、1より大きい自然数のうち、「それより小さい2つの自然数の積」として表すことができない数のことです。例えば、5は素数ですが、6は2×3と表せるため素数ではありません。1より大きい素数以外の自然数はすべて合成数と呼ばれます。
素数判定(Primality Test)とは、入力された数値が素数であるかどうかを判定するためのアルゴリズムです。
本記事では、数値を引数として受け取り、その数が素数かどうかを判定するJavaScript関数を実装します。
素数判定の考え方
効率的に素数を判定するには、次の順序でチェックを行います。
- 整数でない数値(小数)は素数ではない
- 1以下の数値は素数ではない
- 2と3は素数である
- 2以外の偶数は素数ではない
- 3から√num(平方根)までの奇数で順番に割り切れるかを確認する
平方根まで調べれば十分なのは、num = a × b と表せるとき、a と b の少なくとも一方が必ず √num 以下になるためです。これにより無駄な計算を省き、処理速度を大幅に向上できます。
サンプルコード
以下が実際のコードです。
const findPrime = (num = 2) => {
if (num % 1 !== 0) {
return false;
}
if (num <= 1) {
return false;
}
if (num <= 3) {
return true;
}
if (num % 2 === 0) {
return false;
}
const dividerLimit = Math.sqrt(num);
for (let divider = 3; divider <= dividerLimit; divider += 2) {
if (num % divider === 0) {
return false;
}
}
return true;
};
console.log(findPrime(2));
console.log(findPrime(97));
console.log(findPrime(131));
console.log(findPrime(343));実行結果
コンソールには以下のように出力されます。
true
true
true
false
コードの解説
num % 1 !== 0:小数点以下を持つ数値は素数にならないためfalseを返します。num <= 1:1以下の数値は素数ではないためfalseを返します。num <= 3:2と3は素数なのでtrueを返します。num % 2 === 0:2以外の偶数は必ず合成数となるためfalseを返します。- 最後に、
Math.sqrt(num)で求めた上限までの奇数(3, 5, 7, ...)で順に剰余を確認し、割り切れる数が見つかればfalse、見つからなければその数は素数としてtrueを返します。
-
JavaScript RegExp test()メソッドとは?文字列マッチ判定の使い方を解説
RegExpオブジェクトのtest()メソッドは、指定した文字列の中に正規表現パターンと一致する部分(マッチ)が存在するかどうかを調べるためのメソッドです。マッチが見つかった場合は true を返し、見つからなかった場合は false を返します。このシンプルな仕組みにより、文字列の検証や条件分岐を手軽に行うことができます。基本的な構文regex.test(str)引数: 検索対象となる文字列を指定します。戻り値: マッチすれば true、しなければ false。実装例以下は、RegExp test()メソッドを使った具体的なコード例です。ボタンをクリックすると、表示中の文字列に「fox」とい
-
JavaScriptの数値(Number)の基本と実践サンプルコード
JavaScriptでは、整数も小数もすべて「Number」型として扱われます。この記事では、数値変数の定義方法と、それらを使った簡単な演算の例を、動作するHTMLサンプルコードとともに紹介します。サンプルコード以下は、JavaScriptで数値を扱う基本的な例です。整数(22、99)と小数(1.523)を変数に格納し、ボタンをクリックすると画面に表示する仕組みになっています。<!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> <meta name=viewport co