数学A / 整数の性質

ユークリッドの互除法

★ 基礎ユークリッドの互除法最大公約数

問題

ユークリッドの互除法を用いて、 の最大公約数を求めよ。

ヒントを見る

大きい数を小さい数で割って余りを出す。次は『さっき割った数』を『余り』で割る、をくり返す。余りが になったときの割る数が答え。

解答・解説

方針

大きいほうを小さいほうで割り、余りが出たら『割る数と余り』で同じことを繰り返す。余りが になったときの『割る数』が最大公約数だ。

解答

⓪ 発想 — どう考え始めるか。 の最大公約数。素因数分解しようとしても、手が止まるはずだ( を割り切る素数がすぐには見えない)。

こういうときのための道具がユークリッドの互除法である。手順は機械的だ。

大きいほうを小さいほうで割り、余りを出す。次は「割る数」と「余り」で同じことを繰り返す。余りが になったら、そのときの割る数が答え。

余りが になった。そのとき割っていた数 が最大公約数。

最後の余り()ではなく、その手前の「割る数」が答え。 ここを取り違えないこと。

公式ユークリッドの互除法: なら 。余りで割るをくり返す

互除法は『割って余りを出す』をくり返すだけだ。 で割ることから始める。

余りが になった。そのときの割る数 が最大公約数だ。

(なぜこれで求まるのか。『 の公約数』は『 と余り の公約数』とぴったり同じ — 余りを取っても公約数は変わらない。だから数をどんどん小さくしていって、最後に残る数が最大公約数になる。素因数分解しにくい大きな数でも使えるのが強みだ。)

6×66×633156
ユークリッドの互除法: 15×6 の長方形から 6×6 の正方形を切り取る操作を繰り返すと、最後に残る正方形の1辺(=3)が最大公約数

発展 — 一歩先へ。 互除法には、逆に読むという使い方がある。計算の跡を逆走すると、次の形の式が作れるのだ。

実際、互除法の式を下から順に代入していくと

が見つかった。 確かめると ✓。

一般に、次の定理が成り立つ。

これは強力だ。 特に が互いに素()なら

を満たす整数が存在する。これが 次不定方程式が解ける理由であり(次の問題で使う)、暗号理論で「逆元を求める」操作の正体でもある。

互除法は、gcd を求めるだけの道具ではない。 割り算の跡を逆にたどることで、方程式の解までもたらしてくれる

年前のアルゴリズムが、なぜ今も現役なのか — 速いだけでなく、副産物として深い情報を吐き出すからだ。数学の道具は、しばしば作った人の意図を超えて働く。

別解

互除法が本当に正しいのか、素因数分解で答え合わせをしよう。そして互除法を図形として見ると、この 年前のアルゴリズムの美しさが分かる。

答え合わせ: 素因数分解でも求めてみる。

共通の素因数は だけ( は互いに素)。

互除法の答えと一致した。

しかし、この分解を見つけるのは大変だったはずだ。 で割っても割り切れず、 でようやく割れる。 まで試す必要がある。互除法なら、割り算 回で終わった。

互除法を、図形で見る。

の長方形を、正方形のタイルで敷き詰めることを考えよう。できるだけ大きな正方形で、余りなく敷き詰めたい。

手順1: いちばん大きく取れるのは の正方形。 個切り取ると、 の長方形が残る。

手順2: 残った長方形から、 の正方形を切り取る。 個取れて、 が残る。

手順3: の正方形がちょうど で、余りなく埋まった。

最後にぴったり埋まった正方形の 辺が 。これが最大公約数である。

互除法とは「長方形を、できるだけ大きな正方形で敷き詰める手続き」だったのだ。ユークリッドが『原論』でこれを幾何の言葉で書いたのは、偶然ではない。 つの数の共通の"ものさし"を探す — それが最大公約数の意味である。

互除法の速さ。 この方法は、驚くほど速い。 数がどんなに大きくても、割り算の回数は桁数の 倍程度にしかならない(フィボナッチ数列を使って証明できる)。

桁の数どうしでも、 回程度の割り算で gcd が出る — 一瞬だ。一方、同じ数を素因数分解しようとすれば、宇宙の年齢でも足りない。

「割り算を繰り返す」という原始的な操作が、素因数分解という難問を迂回して、答えにたどり着く。 アルゴリズムの勝利である。

ポイント

  • 『割る数を余りで割る』をくり返す
  • 余りが になったときの割る数が最大公約数
  • 大きな数でも素因数分解せずに最大公約数が出せる

よくある間違い

  • 最後の『余り 』の1つ手前の余りを答えにしてしまう(割る数が答え)
  • 割る数と余りの役割を取り違えて次の割り算に進む
  • 途中で余りが大きくなったと勘違いして手順を止める(余りは必ず割る数より小さいので、必ず終わる)