JavaScriptで2つの数値の最小公倍数(LCM)を計算する関数の実装方法
最小公倍数(LCM)とは
2つの整数 a と b の最小公倍数(LCM:Least Common Multiple)とは、a と b のどちらでも割り切れる正の整数のうち、最も小さいものを指します。
例えばー
4と6の最小公倍数は12です。これは、4でも6でも余りなく割り切れる数の中で、12が最も小さいためです。
本記事では、2つの数値を受け取り、その最小公倍数を計算して返すJavaScript関数を作成します。
実装のポイント:最大公約数との関係
最小公倍数を求めるときに役立つのが、次の数学的な関係式です。
LCM(a, b) × GCD(a, b) = a × b
つまり、最大公約数(GCD/HCF)さえ求められれば、2つの数の積を最大公約数で割るだけで最小公倍数を導き出せるのです。
サンプルコード
以下は、1から順に共通の約数を調べて最大公約数を特定し、そこから最小公倍数を計算するシンプルな実装例です。
const num1 = 4;
const num2 = 6;
const findLCM = (num1, num2) => {
let hcf;
// 1から小さい方の数値までループし、共通の約数を探す
for (let i = 1; i <= num1 && i <= num2; i++) {
if (num1 % i == 0 && num2 % i == 0) {
hcf = i; // 共通の約数が見つかるたびに更新(最終的に最大公約数になる)
}
}
// 最小公倍数 = 2つの数の積 ÷ 最大公約数
let lcm = (num1 * num2) / hcf;
return lcm;
};
console.log(findLCM(num1, num2));出力結果
コンソールには以下のように表示されます。
12
より効率的な方法:ユークリッドの互除法
上記の方法は1から順番に調べていくため、扱う数値が大きくなると処理に時間がかかります。パフォーマンスを重視する場合は、ユークリッドの互除法を使った再帰的な実装がおすすめです。
const findLCMEfficient = (num1, num2) => {
const gcd = (a, b) => (b === 0 ? a : gcd(b, a % b));
return (num1 * num2) / gcd(num1, num2);
};
console.log(findLCMEfficient(4, 6)); // 12この方法であれば、非常に大きな数値に対しても高速に最小公倍数を計算できます。
まとめ
JavaScriptで最小公倍数を求める基本は「2つの数の積 ÷ 最大公約数」という公式です。小さな数値なら単純なループでも十分ですが、実務や大きなデータを扱う場面では、ユークリッドの互除法による実装を選ぶことで効率よく処理できます。
-
JavaScriptで2つの数値を加算する際に必要な繰り上がり(キャリー)の回数を求める方法
問題 2つの数値を受け取るJavaScriptの関数を記述する必要があります。 この関数は、まるで紙の上で筆算を行うように、その2つの数値を加算する際に発生する繰り上がり(キャリー)の回数を数えて返すものとします。 例えば、次の図のように 179 と 284 を足し合わせる場合、繰り上がりは2回発生します。したがって、この2つの数値を渡したとき、関数は 2 を返す必要があります。 解き方のポイント この問題は、各桁を下の位から順番に見ていき、「その桁の2つの数字と、前の桁からの繰り上がりの合計が10以上になったかどうか」を判定することで解けます。 剰余演算子(%)を使えば、数値の一番下の
-
2つの数のk番目の公約数を求めるアルゴリズムとC言語での実装方法
プログラミングの定番問題の一つに、「2つの整数 x と y が与えられたとき、それらに共通する約数(公約数)のうち、小さい方から数えて k 番目の値を出力する」というものがあります。この記事では、その考え方と具体的な実装方法をわかりやすく解説します。問題の例たとえば x = 9、y = 18、k = 2 が入力として与えられた場合を考えてみましょう。9 の約数 : 1, 3, 918 の約数 : 1, 2, 3, 6, 9, 18公約数 : 1, 3, 9→ 2番目の公約数は「3」このように、まず両方の数の約数を確認し、共通して現れる値を小さい順に並べれば、k番目の公約数が求まります。なお、最