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

JavaScript:各桁の合計以上となる最小の素数を求める方法

問題の概要

本記事では、JavaScriptで「数値を受け取り、その各桁の合計を計算し、合計以上となる最小の素数を返す関数」を実装する方法を解説します。

解決アプローチ

この問題は、以下の3つの関数に分けて考えると分かりやすくなります。

  • digitSum関数:再帰処理を使って、数値の各桁の合計を求めます。
  • isPrime関数:与えられた数値が素数かどうかを判定します。
  • nearestPrime関数:桁の合計を起点に、素数が見つかるまで1ずつ増やしながら探索します。

コード例

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

コードの解説

入力値が 56563 の場合を例に見てみましょう。各桁の合計は 5 + 6 + 5 + 6 + 3 = 25 となります。25は5×5のため素数ではありませんが、isPrime関数による判定とwhileループにより、26、27、28と順に確認され、最初の素数である29に到達した時点で処理が終了し、結果として29が返されます。

補足:パフォーマンス改善のヒント

上記のisPrime関数は単純な実装ですが、大きな数を扱う場合は判定範囲を √n まで に絞ることで効率化できます。

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

このように、処理を小さな関数に分割して組み合わせると、読みやすく保守性の高いコードになります。

  1. JavaScriptで数値の各桁の数字を一つずつ分割表示する方法

    はじめに この記事では、ユーザーが入力した数値を検証し、有効な数値であればその各桁の数字を画面に一つずつ表示するJavaScriptプログラムの作り方を解説します。 動作イメージ ページ上のボタンをクリックすると入力ダイアログが開き、そこに数値を入力してOKを押すと、入力された数値の各桁が一行ずつ画面に出力される仕組みです。 例えば、入力が次のような場合—— 43354 画面には次のように表示されます。 4 3 3 5 4 完成コード HTML <!DOCTYPE html> <html>   <head>   &n

  2. C++で数値の桁の再帰的な合計が素数かどうかを判定する方法

    整数変数 number を入力として受け取り、その各桁の合計を計算して、合計値が素数かどうかを判定する問題について解説します。この処理は、桁の合計が一桁になるまで繰り返され、最終的に得られた一桁の数値が素数であるかどうかを確認します。たとえば、入力が 123 の場合、桁の合計は 1+2+3=6 となり、6 は素数ではないため、結果は「素数ではない」となります。 入出力シナリオの例 入力 − number = 12341 出力 − 桁の再帰的な合計は素数(PRIME) 説明 − 1+2+3+4+1 = 111+1 = 22 は素数です。 入力 − number = 1664 出力 − 桁の再帰