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

JavaScriptで数値の各桁の合計を求め、それ以上の最も近い素数を見つける方法

本記事では、JavaScriptを使って「与えられた数値の各桁を合計し、その合計以上で最も近い素数を返す関数」を実装する方法を解説します。

例えば、56563という数値が与えられた場合、各桁の合計は 5 + 6 + 5 + 6 + 3 = 25 となります。25は素数ではないため、25以上で最も近い素数である 29 を返すことになります。

実装コード

この処理は、以下の3つの関数に分けて実装すると分かりやすくなります。

  • digitSum:再帰呼び出しを使って各桁の合計を計算する
  • isPrime:ある数値が素数かどうかを判定する
  • nearestPrime:合計値から順に素数が見つかるまで探索する
const num = 56563;

// 各桁の合計を再帰的に計算する関数
const digitSum = (num, sum = 0) => {
    if(num){
        return digitSum(Math.floor(num / 10), sum + (num % 10));
    }
    return sum;
};

// 素数かどうかを判定する関数
const isPrime = n => {
    if (n === 1){
        return false;
    } else if(n === 2){
        return true;
    } else {
        for(let x = 2; x < n; x++){
            if(n % x === 0){
                return false;
            }
        }
        return true;
    }
};

// 合計値以上で最も近い素数を返す関数
const nearestPrime = num => {
    let sum = digitSum(num);
    while(!isPrime(sum)){
        sum++;
    };
    return sum;
};

console.log(nearestPrime(num));

実行結果

このコードをコンソールで実行すると、以下の出力が得られます。

29

コードの解説

1. digitSum関数(桁の合計)

この関数は再帰的に動作します。num % 10 で末尾の桁を取り出して合計に加え、Math.floor(num / 10) で残りの桁を新しい引数として自身を再度呼び出します。numが0になった時点で合計値を返します。

2. isPrime関数(素数判定)

1は素数ではないためfalseを返し、2は素数なのでtrueを返します。それ以外の数値については、2からn-1までのすべての整数で割り切れるかどうかを確認し、割り切れる数が存在しなければ素数と判断します。

3. nearestPrime関数(最も近い素数の探索)

まずdigitSumで各桁の合計を取得し、その値が素数になるまで1ずつ増やしながらisPrimeで判定を繰り返します。最初に見つかった素数が「合計以上で最も近い素数」となります。

なお、素数判定をより効率化したい場合は、試し割りの範囲を x <= Math.sqrt(n) までに限定することで、大きな数値に対しても高速に処理できるようになります。

  1. 【初心者向け】JavaScriptのFileとFileReaderを使ってファイルを読み込む方法

    JavaScriptにおけるFileとFileReaderとは? JavaScriptでは、<input type=file>要素を使うことで、ユーザーにローカルファイルを選択させることができます。選択されたファイルはFileオブジェクトとして取得でき、ファイル名・サイズ・MIMEタイプなどの基本情報へアクセス可能です。 さらに、FileReaderオブジェクトを利用すれば、選択されたファイルの中身を非同期で読み込み、テキストやデータURLとして扱うことができます。 サンプルコード 以下は、JavaScriptでFileとFileReaderを使用して、ファイルの詳細情報を表示し

  2. JavaScriptで配列内のすべてのピーク(局所最大値)とその位置を検出する方法

    データ分析や信号処理の現場では、数値の配列の中から「山」にあたる部分、つまり局所最大値(ピーク)とその位置を特定したい場面がよくあります。本記事では、JavaScriptを使って配列内のすべてのピークと、そのインデックス位置を効率的に検出する方法を解説します。 前提となる例 まず、次のようなJavaScriptの配列を用意します。 const arr = [4, 3, 4, 7, 5, 2, 3, 4, 3, 2, 3, 4]; この配列の各要素をY軸の値としてプロットし、隣り合う要素同士をX軸上で等間隔(単位距離)に配置すると、グラフは以下のようになります。 グラフを見ると分かるように、こ