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

JavaScriptで数値のすべての素因数を見つける方法

はじめに

本記事では、任意の数値を引数として受け取り、その数値を割り切るすべての素数(素因数)を配列として返すJavaScript関数の作成方法を解説します。

問題の概要

例えば、入力された数値が「18」だった場合、18を割り切る素数は「2」と「3」なので、出力は次のようになります。

const output = [2, 3];

コード例

それでは、この機能を実装するコードを見ていきましょう。

const num = 18;

// 素数判定を行う関数
const isPrime = (n) => {
    for(let i = 2; i <= n/2; i++){
        if(n % i === 0){
            return false;
        }
    };
    return true;
};

// 素因数をすべて取得する関数
const findPrimeFactors = num => {
    const res = num % 2 === 0 ? [2] : [];
    let start = 3;
    while(start <= num){
        if(num % start === 0){
            if(isPrime(start)){
                res.push(start);
            };
        };
        start++;
    };
    return res;
};

console.log(findPrimeFactors(18));

コードの解説

このコードは大きく分けて2つの関数で構成されています。

isPrime関数: 引数として受け取った数値が素数かどうかを判定します。2から対象の数値の半分まで順番に割っていき、1つでも割り切れる数が存在すれば素数ではない(false)と判断し、最後まで割り切れなければ素数(true)を返します。

findPrimeFactors関数: まず、入力された数値が偶数かどうかを確認し、偶数であれば結果配列に「2」を追加します。その後、3から順に入力値までの各数値について、「入力値を割り切れるか」「その数値自体が素数であるか」の2条件をチェックし、両方を満たすものだけを結果配列に格納していきます。

実行結果

上記のコードを実行すると、コンソールには以下のように出力されます。

[2, 3]

まとめ

このように、素数判定用の補助関数と組み合わせることで、指定した数値のすべての素因数を簡単に抽出できます。なお、この実装はシンプルで理解しやすい反面、大きな数値に対しては計算量が増えるという点に注意してください。パフォーマンスが必要な場合は、平方根までの範囲で判定する方法や、試し割り法による素因数分解の最適化を検討するとよいでしょう。

  1. Javaで数の一意な素因数の積を求めるプログラム

    ある整数の一意な素因数(重複しない素因数)の積を求めるためのJavaコードは以下の通りです。 例 public class Demo { public static long prime_factors(int num){ long my_prod = 1; for (int i = 2; i <= num; i++){ if (num % i == 0){ boolean is_prime = true; for (int j = 2; j <= i / 2; j

  2. Pythonで整数のすべての素因数をソート順に求めるプログラム

    1より大きい整数 n が与えられたとき、その数のすべての素因数を見つけ、昇順(ソートされた順序)で返すことを考えます。任意の整数は素数の積として表すことができ、これらの素数がその数の素因数となります。なお、同じ素因数が複数回現れる場合もあります(例:12 = 2 × 2 × 3)。例えば、入力が 42 の場合、出力は [2, 3, 7] となります。解法のアプローチこの問題は「試し割り法」と呼ばれる手法で解くことができます。手順は以下の通りです。結果を格納する新しいリスト res を用意するn が 2 で割り切れる間、以下を繰り返すres の末尾に 2 を追加するn := n ÷ 2 の商とす