10033 / 12877を約分せよ! 分子と分母を10033と12877の最大公約数で割ればいいのですが、すぐにはわかりません。

2つの整数 A , B の最大公約数を高速に求めるアルゴリズムとして、ユークリッドの互除法があります。

1. A , B のうち小さい方で大きい方をわり、大きい方をその余りで置き換える
2. A , B のうち、いずれかが 0 の場合は終了。そうでない場合は 1 を繰り返す
3. 0 でない方の数がA , B の最大公約数になっている。

ユークリッドの互除法を使えば10033と12877の最大公約数は79であることがわかります。なので10033 / 12877を約分すると127 / 237になります。

また最小公倍数はAとBを掛けて最大公約数で割ると求めることができます。

C#で実装する

これをC#で実装してみることにします。AとBの双方がint型の範囲内であっても最小公倍数はこれを超える場合があります。またあとのことを考えてGetGCDメソッドとGetLCMメソッドの引数をlong型にしています。

実行結果

3つ以上の最大公約数と最小公倍数

3つ以上の整数a , b , c , d , e , … の場合はどうすればいいでしょうか? まずaとbの最大公約数を求め、これとcの最大公約数を求める、そのあとこれとdの最大公約数を求める…を繰り返すことで求めることができます。また最小公倍数も同じ方法で求めることができます。

実行結果

JavaScriptでも実装してみる

JavaScriptでも実装してみます。