Pythonでユークリッドの互除法
あるプログラムで、「Euclid's algorithm(ユークリッドのアルゴリズム)」としてこのようなPythonのコードで最大公約数(greatest common divisor)をもとめていました。
def gcd(m,n): if m < 1.0: return 1.0 if abs(n) < 0.01: return m return gcd(n,m % n)
ウィキペディア:ユークリッドの互除法の項目によると、この繰り返しの出力がmとnの最大公約数となるとされていて、上のコードにほぼ当てはまります。
1. 入力を m, n (m ≧ n) とする。
2. n = 0 なら、 m を出力してアルゴリズムを終了する。
3. n が m を割り切るなら、 n を出力してアルゴリズムを終了する。
4. m を n で割った余りを新たに m とし、更に m と n を取り替えて 3. に戻る。