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

JavaScriptで範囲内の数値の最小公倍数(LCM)を計算する方法

本記事では、2つの数値 ab(a ≤ b)を含む配列を受け取り、[a, b] の範囲内に存在するすべての数値の最小公倍数(LCM:Least Common Multiple)を返す関数をJavaScriptで実装します。

アプローチ

実装は以下の2段階で行います。

まず、2つの数値の最小公倍数を計算する基本的な関数 lcm を作成します。この関数は、小さい方の数値から順に降下しながら、両方の数値を割り切れる最大の約数(最大公約数)を探し、見つかれば a × b ÷ その約数 を返します。共通の約数が存在しない場合は、そのまま a × b が最小公倍数となります。

次に、この lcm 関数を [a, b] の範囲内の各数値に対して再帰的に適用していき、最終的な結果を返す関数 leastCommonMultipleInRange を作成します。

コード例

const lcm = (a, b) => {
    let min = Math.min(a, b);
    while(min >= 2){
       if(a % min === 0 && b % min === 0){
          return (a*b)/min;
       };
       min--;
    };
    return (a*b);
};
const leastCommonMultipleInRange = (arr, len = arr[0], res = 1) => {
    if(len <= arr[1]){
       return leastCommonMultipleInRange(arr, len+1, lcm(res, len));
    };
    return res;
};
console.log(leastCommonMultipleInRange([6, 8]));
console.log(leastCommonMultipleInRange([6, 18]));
console.log(leastCommonMultipleInRange([1, 8]));
console.log(leastCommonMultipleInRange([10, 25]));

処理の流れ

leastCommonMultipleInRange 関数は、デフォルト引数を使って len(現在処理中の数値)を配列の先頭要素で初期化し、res(累積結果)を 1 で初期化します。len が配列の末尾要素以下である間、len を 1 ずつ増やしながら再帰呼び出しを繰り返し、そのたびに lcm(res, len) でそれまでの結果と現在の数値の最小公倍数を求めて更新していきます。範囲の末尾に達した時点で、累積された res が範囲全体の最小公倍数となります。

出力

コンソールには以下のように出力されます。

168
12252240
840
26771144400

例えば [6, 8] の場合、6、7、8 の最小公倍数は 168 となり、[1, 8] の場合は 1 から 8 までのすべての数値の最小公倍数である 840 が返されます。

  1. JavaScriptで配列の中央値を計算する方法をわかりやすく解説

    中央値(メジアン)とは、数値データを小さい順に並べたときにちょうど中央に位置する値のことです。JavaScriptで配列の中央値を求めるには、まず配列をソートし、その後要素数に応じて処理を分けます。要素数が奇数の場合は中央の1つの要素を、偶数の場合は中央に近い2つの要素の平均値を中央値として返します。中央値の計算手順配列をソートする - 数値配列の場合、sort() メソッドに比較関数 (a, b) => a - b を渡して正しく昇順ソートします。中央のインデックスを求める - Math.floor(arr.length / 2) で中央位置を整数として取得します。要素数の判定を行う

  2. JavaScriptで配列の平均値を計算する方法

    JavaScriptで配列の平均値を求めるには、配列内のすべての要素を合計し、その合計を配列の長さ(要素数)で割ります。要素の合計を求めるには、forEach()メソッドやreduce()メソッドを使うと簡単に実装できます。コード例<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initia