ちょっとアルゴニズム - GCD,LCM
GCDとはGreatest Common Divisor、最大公約数です。最古のアルゴリズムということです。すごいです。
そこで、今回はLeast Common MultipleはLCM、最小公倍数の算出をしてみます。まず、GCD(最大公約数)ですが。Swiftで書きます。
func gcd(_ m: Int, _ n: Int) -> Int {
let r: Int = m % n
if r != 0 {
return gcd(n, r)
} else {
return n
}
}
実行してみます。
gcd(12,8)
とすると"6"と答えがでます。
wikiでの説明は以下。
b を r で割った剰余、 除数 r をその剰余で割った剰余、と剰余を求める計算を逐次繰り返すと、剰余が 0 になった時の除数が a と b との最大公約数となる。
x = 12、y = 18 とすると、x を y で割った余り r は 12
y = 18 を r = 12 で割った余り r_1 は 6
r = 12 を r_1 = 6 で割った余りは r_2 は 0
よって、このときの割る数「6」が 12 と 18 の最大公約数である
これを元に
コードを変更します。
func gcd(_ m:Int,_ n:Int)->Int{
if n == 0{
return m
}else{
return gcd(n , m % n)
}
}
こちらの方が定義からいうと理解しやすいです。
LCM、最小公倍数は上記の"gcd()"を使って
func lcm(_ m: Int, _ n: Int)->Int{
return m * n / gcd(m, n)
}
として実行してやります。
lcm(10,8)
"40"と答えが出ます。
これをPythonでやると
def gcd(x, y):
if y == 0:
return x
else:
return gcd(y, x % y)
if y == 0:
この条件以外で実行されます。
print(gcd(8,10))
答えが"2"と出ます。次最小公倍数です。
def lcm(a, b):
return a * b // gcd (a, b)
print(lcm(10,8))
答えは"40"とでます。
この記事が気に入ったらサポートをしてみませんか?