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

JavaScriptで数値の「加法的永続性」を求める方法

本記事では、正の整数を受け取り、その加法的永続性(additive persistence)を返すJavaScript関数の実装方法を解説します。

加法的永続性とは?

整数nの加法的永続性とは、その数を「各桁の数字の合計値」で置き換える操作を、数が1桁になるまで繰り返したときの繰り返し回数のことです。

例として、次の数値を見てみましょう。

1679583

各桁の合計を計算していくと、以下のように変化します。

1 + 6 + 7 + 9 + 5 + 8 + 3 = 39   // 1回目
3 + 9 = 12                 // 2回目
1 + 2 = 3                   // 3回目

このように、3回の操作で1桁の数に到達するため、出力結果は 3 となります。

コード例

それでは、実際のコードを見ていきましょう。まず各桁の合計を再帰的に計算する関数を定義し、それを利用して永続性を求めます。

const num = 1679583;

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

// 加法的永続性を求める関数
const persistence = num => {
   num = Math.abs(num); // 負の数にも対応
   let res = 0;
   while(num > 9){
      num = sumDigit(num);
      res++;
   };
   return res;
};

console.log(persistence(num));

コードのポイント

  • sumDigit関数: 再帰呼び出しを使い、num % 10で最下位の桁を取り出し、Math.floor(num / 10)で残りの桁へと処理を進めていきます。numが0になった時点で合計値を返します。
  • persistence関数: Math.abs()で絶対値に変換することで負の入力にも対応し、数値が9以下(1桁)になるまでsumDigitを繰り返し適用しながらカウンターを増やしていきます。

実行結果

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

3

このように、シンプルな再帰処理とループを組み合わせるだけで、加法的永続性を効率的に求めることができます。同様の考え方は、「乗法的永続性」(各桁の積で置き換える操作)など、他の種類の永続性を扱う場合にも応用できます。

  1. JavaScriptで数値が三角数かどうかを判定する方法

    三角数(Triangular Number)とは? 三角数とは、点を正三角形の形に敷き詰めたときに現れる数のことです。n番目の三角数は「1からnまでの自然数の合計」として表され、次の公式で求められます。 Tn = n(n+1) / 2 具体的な三角数は 1, 3, 6, 10, 15, 21, 28 … と続きます。例えば 10 は、各辺に4個の点を配置した正三角形を構成できるため、三角数です。 問題 数値を引数として受け取り、その数値が三角数であれば true を、そうでなければ false を返すJavaScript関数を実装します。 判定の考え方 n(n+1)/2 = num となる正

  2. JavaScriptで指定した数より大きい最小の素数を見つける方法

    問題JavaScriptで、ある数値 n を受け取る関数を作成することを考えます。この関数は、n より大きい数の中で最小となる素数を返す必要があります。アプローチまず、与えられた数が素数かどうかを判定する補助関数 isPrime を用意します。素数判定では、2 からその数の平方根まで順に割り切れるかを確認すれば十分です。平方根以降の因数は必ずペアが存在するため、ここまで調べれば判定できます。これにより計算量を大幅に抑えられます。次に、nextPrime 関数の中で、引数の数値を1ずつ増やしながら isPrime で判定を行い、最初に見つかった素数を返します。コード例以下が実際のコードです。co