たおピーの人生メモ

たおピーの人生をメモとして残しておく

ユークリッドの互除法で最大公約数を求める

今日は、2つの整数 m と n の最大公約数を

ユークリッドの互除法で求めるアルゴリズムです。

ユークリッドの互除法とは、

「2つの整数 m と n (m > n)があったとき、mとnの最大公約数は

m-n と n の最大公約数を求める方法に置き換えることができる」

という原理だそうです。

 

具体的には、m-n (m < n なら n -m) を mとn が等しくなるまで繰り返す。

mとnが等しくなったらそれが、最大公約数となる。

 

例として、m=24, n=18 で計算してみよう。

m - n = 24 - 18 = 6 これを新たなmとする

m < n なので、 n - m = 18 - 6 = 12 これを新たなnとする。

同じく、m < n なので、 n - m = 12 - 6 = 6 これを新たなnとする。

ここで、m = nとなるので計算はやめる。

m = n となった「6」が最大公約数となる。

以上、をふまえ

 

【問題】

ユークリッドの互除法で最大公約数を求めるには?

 

【回答】

import sys

m = int(sys.argv[1])

n = int(sys.argv[2])

print str(m) + 'と' + str(n) + 'の最大公約数は',

while(m <> n):

  if(m > n):

    m -= n

  else:

    n -= m

print str(m) + 'です。'

 

【実行結果】

> python euclid.py 24 18

24と18の最大公約数は 6です。

 

> python euclid.py 50 5

50と5の最大公約数は 5です。

 

> python euclid.py 49 42

49と42の最大公約数は 7です。

 

もっとpythonらしいコーディングのしかたがあると思うのですが

まだ、駆け出しのpyer(パイラー)なもんで、

ご勘弁を。