最小公倍数計算機

ユークリッド互除法を基に、整数リストの最小公倍数(LCM)を計算します。

使い方

最小公倍数(LCM)とは、集合内のすべての整数で割り切れる最小の正の整数です。最も身近な用途は分数の通分で、たとえば 1/4 + 1/6 を計算するには 4 と 6 の LCM(= 12)を求めて分母を 12 に揃えてから足します。本ツールは LCM を GCD の恒等式 lcm(a, b) = a × b / gcd(a, b) を介して計算し、GCD はユークリッド互除法で求めます。3つ以上の数値はペアごとに lcm(a, b, c) = lcm(lcm(a, b), c) を繰り返します。

計算式

lcm(a, b) = |a × b| / gcd(a, b) リストの場合:lcm(a, b, c, …) = lcm(lcm(a, b), c, …) gcd はユークリッド互除法で求める: b ≠ 0 の間:(a, b) := (b, a mod b) a を返す

a, b は正の整数(符号は無視され |a|, |b| を使う)。lcm-via-gcd の恒等式は任意の整数ペアで厳密に成立し、「公倍数を順に列挙して一致を探す」という素朴な方法(O(min(a, b)) で大きな数では非常に遅い)を回避できます。ペア再帰により、入力数 n に対して GCD 呼び出しを O(n) 回行うだけで任意個数に拡張可能です。

計算例

  • 数値:4, 6, 8
  • lcm(4, 6) = |4 × 6| / gcd(4, 6) = 24 / 2 = 12
  • lcm(12, 8) = |12 × 8| / gcd(12, 8) = 96 / 4 = 24
  • LCM(4, 6, 8) = 24。検算:24 ÷ 4 = 6、24 ÷ 6 = 4、24 ÷ 8 = 3。すべて整数なので、24 は3つすべての倍数。 ✓

よくある質問

なぜ GCD の恒等式を使うのですか?倍数を列挙するのではダメ?

小さな数なら倍数を列挙しても求められます(4 と 6 の LCM:4, 8, 12 でヒット)。ただし数が大きくなると一気に効率が悪くなり、lcm(99, 100) でも100個近く、lcm(99,991, 100,000) では数百万個の倍数を試す必要があります。GCD 恒等式を使えば、どんな大きさでもユークリッド互除法を1回呼ぶだけで済み、そのステップ数は概ね log₂(min(a, b)) で抑えられます。したがって lcm(99,991, 100,000) は16ステップ程度。結果は同じですが、計算量は劇的に減ります。

LCM は実生活でどんなときに使いますか?

最も多いのは、分母が異なる分数の足し算・引き算です。たとえば 3/4 + 5/6 を計算するには共通分母が必要で、それが 4 と 6 の LCM(= 12)です。それ以外の用途としては、繰り返し起きる事象が同時に起きるタイミングを求める場合(「バスAは8分間隔、バスBは12分間隔。次に同時に到着するのはいつ?」→ LCM = 24分)、歯車比、音楽理論(2つのリズムがいつ揃うか)、数学オリンピックの問題などがあります。学校を出てしまえば、日常で出会うのはほぼ分数の足し算だけ、という人が大多数です。

0 や負の数を入れたらどうなりますか?

符号は無視され、絶対値で計算します。たとえば lcm(−4, 6) = lcm(4, 6) = 12。これは数学的な標準的な慣例で、教科書によっては LCM を正の整数のみで定義しますが、符号を取り除く一般化は害がなく便利です。0 を含めると lcm(0, 何でも) = 0 となり、数学的には正しいものの実用的にはほぼ意味がないので、結果が 0 になった場合は入力を確認してください。

3つ以上の LCM を一発で求める閉じた形はありますか?

GCD のような単純な閉形式はありません。3つの数なら lcm(a, b, c) = a × b × c / gcd(gcd(a, b) × gcd(b, c) × gcd(a, c), …) のように書けますが、すぐに複雑になり、ペア再帰 lcm(a, b, c) = lcm(lcm(a, b), c) より速くはなりません。標準ライブラリも教科書も、本ツールもペア再帰を採用しています。a × b × c × … = gcd(…) × lcm(…) という関係は2数のときだけきれいに成り立ち、3数以上では gcd × lcm ≠ 積となります。

関連計算機