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

JavaScriptで指定した範囲内にある「ある数で割り切れる数」の個数を求める方法


問題

2つの整数からなる範囲(配列)を第1引数に、1つの数値を第2引数として受け取るJavaScript関数を作成する必要があります。

この関数は、指定された範囲内に存在する「入力された数値で割り切れる数」をすべて見つけ、その合計個数を返します。

サンプルコード

以下がその実装例です。

const range = [6, 57];
const num = 3;
const findDivisibleCount = (num = 1, [l, h]) => {
   let count = 0;
   for(let i = l; i <= h; i++){
      if(i % num === 0){
         count++;
      };
   };
   return count;
};
console.log(findDivisibleCount(num, range));

出力結果

18

コードの解説

このコードでは、分割代入(デストラクチャリング)を使って範囲配列 [l, h] を下限と上限の2つの変数に分解しています。

その後、l から h までの各整数に対して剰余演算子 % を用い、i % num === 0 が成り立つ場合(つまり inum で割り切れる場合)にカウンターを1ずつ増やしていきます。最後にカウントした総数を返しています。

上記の例では、6から57までの範囲内に3の倍数が18個存在するため、出力は 18 となります。

より効率的な方法:O(1)での計算

範囲が非常に大きい場合、ループ処理ではパフォーマンスが問題になることがあります。そんなときは、数学的な性質を利用して定数時間で答えを求められます。

範囲 [l, h] 内の num の倍数の個数は、次の式で計算できます。

const findDivisibleCountFast = (num = 1, [l, h]) => {
   return Math.floor(h / num) - Math.floor((l - 1) / num);
};
console.log(findDivisibleCountFast(3, [6, 57])); // 18

この方法なら、範囲がどれほど大きくても一度の計算で結果が得られるため、実務でも推奨されるアプローチです。

  1. JavaScriptで指定範囲内の「逆さま数字(Upside Down Numbers)」を数える方法

    逆さま数字(Upside Down Numbers)とは?180度回転させても元の数字と同じように見える数字のことを「逆さま数字」と呼びます。例えば、「9116」や「69」などが該当します。これは次の桁だけが回転しても有効だからです。0 → 01 → 16 → 98 → 89 → 6一方、2・3・4・5・7は回転すると別の記号や無効な形になってしまうため、これらが含まれる数字は逆さま数字にはなりません。問題2つの数値からなる範囲の配列を受け取るJavaScript関数を作成する必要があります。この関数は、指定された範囲内に存在するすべての逆さま数字の個数を返さなければなりません。コード例以下が

  2. C++で指定範囲内のMで割り切れる数を数える方法

    3つの整数 A、B、M が与えられます。A と B は数値の範囲 [A, B] を定義し、目的はこの範囲内に存在する M で割り切れる数の個数を求めることです。基本的な考え方は、i = A から順に最初の M の倍数まで走査し、i % M == 0 が成立するたびにカウントを増やしていくというものです。その後、i ≤ B である限り i を増加させながら同様の判定を繰り返します。具体例で確認してみましょう。入力例A=11, B=20, M=5出力指定範囲内でMで割り切れる数の個数: 2説明範囲 [11, 20] 内で 5 で割り切れる数は 15 と 20 のみです。したがって、答えは 2 とな