Machine Morning

機械学習やWebについて学んだことを記録しています。

最小公倍数と最大公約数を求めるアルゴリズム

最小公倍数は最大公約数を使って簡単に求めることができるので、まず最大公約数を求める。

最大公約数

最大公約数を求める最も有名なアルゴリズムユークリッドの互除法である。

wikipediaから引用すると、

2つの自然数a, b (a >= b)について、aのbによる剰余をrとるすと、aとbとの最大公約数はbとrとの最大公約数に等しい。この操作を剰余が0になるまで繰り返し行い、剰余が0になったときの序数がaとbとの最大公約数となる。

例: 1071と1029の最大公約数を求める。 * 1071を1029で割った余りは42 * 1029を42で割った余りは21 * 42を21で割った余りは0 よって、1071と1029の最大公約数は21である。

これをPythonで実装すると

nums = list(map(int, input().split()))
a, b = max(nums), min(nums)

def GCD(a, b):
    while a % b != 0:
        r = a % b
        a, b = b, r
    return b

print("The GCD of {} and {} is {}.".format(a, b, GCD(a, b)))

最小公倍数

最小公倍数は  \dfrac {a\cdot b} {GCD}で求めることができる。 Pythonで書くと

def LCM(a, b):
    return int((a * b) / GCM(a, b))

print("The LCM of {} and {} is {}.".format(a, b, LCM(a, b)))