イバコの生存記録

いまは競プロ(AtCoder)記事がメインです。

59. ユークリッドの互除法の証明の行間を埋める

私の世代は授業として整数を扱わなかったので、ユークリッドの互除法についても「名前はよく聞く」くらいで実態は毎回調べていました。

そんなことを人生で10回くらい繰り返している気がするので、そろそろ証明をちゃんと理解してメソッドを覚えたいと思います。

 

ユークリッドの互除法の主張は以下のとおりです。

整数の割り算の等式  a = bq + r において、 \gcd(a,b) = \gcd(b,r) が成立する。

 

 \gcd(a, b) は「 a b の最大公約数」です。つまり、「 a b の最大公約数が知りたければ、 a \div b を計算して余り  r を求め、 br の最大公約数を調べれば良い」ということです。

これによってどんどん対象の数を小さくしていき、最終的に「余り 0」となった時点での  b が最大公約数になります。これは、 a \div b = q になったということから、 a b の倍数である、つまり  \gcd(a, b) = b であることが分かったという意味です。

 

さて、これの証明ですが、非常にシンプルに記述されるものの若干癖があって、理解に引っかかる部分が多かったです。以下のサイトの証明を引用します。

manabitimes.jp

 

【証明】
 a = bq + r とする。


 a b\gcd(a,b) の倍数なので、 r=a-bq \gcd(a,b) の倍数になる。
よって、 \gcd(a,b) b r の公約数。
最大公約数は公約数の中で最大のものなので、
 \displaystyle \gcd(b,r) \ge \gcd(a,b)


 b r\gcd(b,r) の倍数なので、 a=bq+r \gcd(b,r) の倍数になる。
よって、 \gcd(b,r) a b の公約数。
最大公約数は公約数の中で最大のものなので、
 \displaystyle \gcd(a,b) \ge \gcd(b,r)

①,②より  \gcd(a,b) = \gcd(b,r) が示された。

 

私はこの証明を見たときにスラスラ理解できなかったので、少しずつ行間を埋めていきましょう。①と②は証明構造は同じなので、①のみ考えます。

 

 a b \gcd(a,b) の倍数なので」について。

 \gcd(a, b) の定義からこいつは  a b の公約数です。そのため、 a b \gcd(a,b) の倍数になります。

 

 r=a-bq \gcd(a,b) の倍数になる」について。

先ほどの考察から、ある整数  m, n を用いて  a = m \times \gcd(a,b) b = n \times \gcd(a,b) と置けます。よって、 r = a-bq = m \times \gcd(a,b) - nq \times \gcd(a, b) = (m - nq) \times \gcd(a,b) となり、 r \gcd(a, b) の倍数であることが分かります。

 

「よって、 \gcd(a,b) b r の公約数」について。

先ほどの考察から、 r \gcd(a, b) の倍数であることが分かりました。つまり、 \gcd(a, b) a, b, r の公約数です。

 

「最大公約数は公約数の中で最大のものなので、 \gcd(b,r) \ge \gcd(a,b)」について。

ここが一番「ん?」となった部分です。まず、今まで  \gcd(a,b) について考えていたのですが、ここで注目しているものは  \gcd(b,r) に変化しています。「今までとは違う対象を考えている」ということに注意してください。
ここで考えているのは  \gcd(b,r) 、つまり  b r の最大公約数です。これが何になるのか?ということは今の時点では分からないですが、 b r公約数(最大とは限らない)については、今までの考察から1つ分かっています。それは  \gcd(a, b) です。
だから、 \gcd(b,r) \ge \gcd(a,b) が成立しますよ、という文になっています。

 

②についての行間埋めも同様になります。

これで「 \gcd(b,r) \ge \gcd(a,b) かつ  \gcd(a,b) \ge \gcd(b,r)」が示されたので、「 \gcd(a,b) = \gcd(b,r)」である必要がある、ということでした。