ユークリッドの互除法

252と105のためのユークリッドの互除法のアニメーション。
クロスバーは、最大公約数(GCD)である21の倍数を表す。
それぞれのステップにおいて、1つの番号がゼロになるまで、より少ない数はより大きな数から引かれる。
残りの数は、GCD。

ユークリッドの互除法(ユークリッドのごじょほう、: Euclidean Algorithm)は、2 つの自然数最大公約数を求める手法の一つである。

2 つの自然数 a, b (ab) について、ab による剰余r とすると、 ab との最大公約数は br との最大公約数に等しいという性質が成り立つ。この性質を利用して、 br で割った剰余、 除数 r をその剰余で割った剰余、と剰余を求める計算を逐次繰り返すと、剰余が 0 になった時の除数が ab との最大公約数となる。

明示的に記述された最古のアルゴリズムとしても知られ、紀元前300年頃に記されたユークリッドの『原論』第 7 巻、命題 1 から 3 がそれである[注釈 1]

(問題) 1071 と 1029 の最大公約数を求める。

  • 1071 を 1029 で割った余りは 42
  • 1029 を 42 で割った余りは 21
  • 42 を 21 で割った余りは 0

よって、最大公約数は21である。

証明

a, b は自然数で a ≠ 0 とする。 ba で割った商を q、剰余を r とすると

b = qa + r

今、d0ar の両方を割り切る自然数とする。

このとき d0 は積 qa を割り切るから、和 qa + r も割り切るが、qa + rb に等しい。したがって、d0ab を割り切る。すなわち ar公約数はすべてbaの公約数である。

逆に、d1ba の両方を割り切る自然数とする。

d1qa を割り切るから差 b - qa を割り切るが、b - qar に等しい。したがって、d1arを割り切る。言い換えると ba の公約数はすべてar の公約数である。

したがって、ba の公約数全体の集合は ar の公約数全体の集合に等しく、特に ba の最大公約数は ar の最大公約数でなければならない。

手続き的記述

ユークリッドの互除法の仕組みは、この図のように最大公約数を求める対象の2つの整数を幅と高さに設定した長方形内での赤色の斜めの直線の描画過程によっても表現できる。 赤色の斜めの直線の描画は、はじめはその長方形内を描画範囲とし、その角から内部に向け、かつ、その辺に対して45度の差を持たせて開始する。 描画範囲の辺の途中に当たれば、その内部へ直角反射するように角度を変える。 赤色の斜めの直線が反射後に描画範囲の向かいの辺と異なる辺の途中に当たる場合、描画範囲の長辺の長さを短辺の長さで割ると余りが生じる状態となっており、直前の反射地点を足掛かりに描画範囲を垂直に区切ってその範囲を絞りこむ。 (区切られて出来た小さいほうの範囲を以後の描画範囲とする) (除数および被除数の変更に相当) 赤色の斜めの直線が描画範囲の角に到達した場合、描画範囲の長辺の長さを短辺の長さで余りなく割れる状態となっており、描画の終了となり、最後にして最小の描画範囲の短辺の長さが最大公約数となる。

手続き的に記述すると、次のようになる。

  1. 入力を m, n (mn) とする。
  2. n = 0 なら、 m を出力してアルゴリズムを終了する。
  3. mn で割った余りを新たに n とし、更に 元のnを新たにm とし 2. に戻る。

上記の手順は「n, m に対して剰余の演算を行うことができる」という仮定だけに依っているので、整数環だけではなく任意のユークリッド整域においても同様にして最大公約因子を求めることができる。

拡張された互除法

整数 m, n の最大公約数 (: Greatest Common Divisor) を gcd(m,n) と表すときに、(拡張された)ユークリッドの互除法を用いて、mx + ny = gcd(m, n) の解となる整数 x, y の組を見つけることができる。上の例の場合、m = 1071, n = 1029 のとき、

1071 = 1 × 1029 + 42
1029 = 24 × 42 + 21
42 = 2 × 21

であるから、gcd(1071, 1029) = 21 であり、

21 = 1029 − 24 × 42 
= 1029 − 24 × (1071 − 1 × 1029)
= −24 × 1071 + 25 × 1029

となるので、x = −24, y = 25 である。

特に、m, n が互いに素(最大公約数が 1)である場合、mx + ny = 1 の整数解を (x, y) とすると、mx + ny = c は任意の整数 c に対して整数解 (cx, cy) をもつことが分かる。


一般に、 m = r 0 , n = r 1 {\displaystyle m=r_{0},n=r_{1}} において、ユークリッドの互除法の各過程を繰り返して

r 0 = k 0 r 1 + r 2     ( 0 < r 2 < r 1 ) {\displaystyle r_{0}=k_{0}r_{1}+r_{2}\ \ (0<r_{2}<r_{1})}
r 1 = k 1 r 2 + r 3     ( 0 < r 3 < r 2 ) {\displaystyle r_{1}=k_{1}r_{2}+r_{3}\ \ (0<r_{3}<r_{2})}
r 2 = k 2 r 3 + r 4     ( 0 < r 4 < r 3 ) {\displaystyle r_{2}=k_{2}r_{3}+r_{4}\ \ (0<r_{4}<r_{3})}
. . . {\displaystyle ...}
r h 1 = k h 1 r h + 0 {\displaystyle r_{h-1}=k_{h-1}r_{h}+0}

が得られるとき、

( r 0 r 1 ) = ( k 0 1 1 0 ) ( r 1 r 2 ) {\displaystyle {\begin{pmatrix}r_{0}\\r_{1}\\\end{pmatrix}}={\begin{pmatrix}k_{0}&1\\1&0\\\end{pmatrix}}{\begin{pmatrix}r_{1}\\r_{2}\\\end{pmatrix}}}
( r 1 r 2 ) = ( k 1 1 1 0 ) ( r 2 r 3 ) {\displaystyle {\begin{pmatrix}r_{1}\\r_{2}\\\end{pmatrix}}={\begin{pmatrix}k_{1}&1\\1&0\\\end{pmatrix}}{\begin{pmatrix}r_{2}\\r_{3}\\\end{pmatrix}}}
( r 2 r 3 ) = ( k 2 1 1 0 ) ( r 3 r 4 ) {\displaystyle {\begin{pmatrix}r_{2}\\r_{3}\\\end{pmatrix}}={\begin{pmatrix}k_{2}&1\\1&0\\\end{pmatrix}}{\begin{pmatrix}r_{3}\\r_{4}\\\end{pmatrix}}}
. . . {\displaystyle ...}
( r h 1 r h ) = ( k h 1 1 1 0 ) ( r h 0 ) {\displaystyle {\begin{pmatrix}r_{h-1}\\r_{h}\\\end{pmatrix}}={\begin{pmatrix}k_{h-1}&1\\1&0\\\end{pmatrix}}{\begin{pmatrix}r_{h}\\0\\\end{pmatrix}}}

すなわち

( r 0 r 1 ) = ( k 0 1 1 0 ) ( k 1 1 1 0 ) ( k 2 1 1 0 ) ( k 3 1 1 0 ) . . . ( k h 1 1 1 0 ) ( r h 0 ) {\displaystyle {\begin{pmatrix}r_{0}\\r_{1}\\\end{pmatrix}}={\begin{pmatrix}k_{0}&1\\1&0\\\end{pmatrix}}{\begin{pmatrix}k_{1}&1\\1&0\\\end{pmatrix}}{\begin{pmatrix}k_{2}&1\\1&0\\\end{pmatrix}}{\begin{pmatrix}k_{3}&1\\1&0\\\end{pmatrix}}...{\begin{pmatrix}k_{h-1}&1\\1&0\\\end{pmatrix}}{\begin{pmatrix}r_{h}\\0\\\end{pmatrix}}}

ここで

K i = ( k i 1 1 0 ) {\displaystyle K_{i}={\begin{pmatrix}k_{i}&1\\1&0\\\end{pmatrix}}} とおくと、 | K i | = 1 {\displaystyle |K_{i}|=-1} であるから K i 1 {\displaystyle K_{i}^{-1}} は存在して
( k h 1 1 1 0 ) 1 ( k h 2 1 1 0 ) 1 . . . ( k 2 1 1 0 ) 1 ( k 1 1 1 0 ) 1 ( k 0 1 1 0 ) 1 ( r 0 r 1 ) = ( r h 0 ) {\displaystyle {\begin{pmatrix}k_{h-1}&1\\1&0\\\end{pmatrix}}^{-1}{\begin{pmatrix}k_{h-2}&1\\1&0\\\end{pmatrix}}^{-1}...{\begin{pmatrix}k_{2}&1\\1&0\\\end{pmatrix}}^{-1}{\begin{pmatrix}k_{1}&1\\1&0\\\end{pmatrix}}^{-1}{\begin{pmatrix}k_{0}&1\\1&0\\\end{pmatrix}}^{-1}{\begin{pmatrix}r_{0}\\r_{1}\\\end{pmatrix}}={\begin{pmatrix}r_{h}\\0\\\end{pmatrix}}}

これらの過程において、 m = r 0 , n = r 1 {\displaystyle m=r_{0},n=r_{1}} 、ユークリッドの互除法により、 r h = gcd ( m , n ) {\displaystyle r_{h}=\gcd(m,n)} であるから、 K i 1 = ( 0 1 1 k i ) {\displaystyle K_{i}^{-1}={\begin{pmatrix}0&1\\1&-k_{i}\\\end{pmatrix}}} を考慮すると、

( 0 1 1 k h 1 ) ( 0 1 1 k h 2 ) . . . ( 0 1 1 k 2 ) ( 0 1 1 k 1 ) ( 0 1 1 k 0 ) ( m n ) = ( gcd ( m , n ) 0 ) {\displaystyle {\begin{pmatrix}0&1\\1&-k_{h-1}\\\end{pmatrix}}{\begin{pmatrix}0&1\\1&-k_{h-2}\\\end{pmatrix}}...{\begin{pmatrix}0&1\\1&-k_{2}\\\end{pmatrix}}{\begin{pmatrix}0&1\\1&-k_{1}\\\end{pmatrix}}{\begin{pmatrix}0&1\\1&-k_{0}\\\end{pmatrix}}{\begin{pmatrix}m\\n\\\end{pmatrix}}={\begin{pmatrix}\gcd(m,n)\\0\\\end{pmatrix}}}

となる。

( x y u v ) = ( 0 1 1 k h 1 ) ( 0 1 1 k h 2 ) . . . ( 0 1 1 k 2 ) ( 0 1 1 k 1 ) ( 0 1 1 k 0 ) {\displaystyle {\begin{pmatrix}x&y\\u&v\\\end{pmatrix}}={\begin{pmatrix}0&1\\1&-k_{h-1}\\\end{pmatrix}}{\begin{pmatrix}0&1\\1&-k_{h-2}\\\end{pmatrix}}...{\begin{pmatrix}0&1\\1&-k_{2}\\\end{pmatrix}}{\begin{pmatrix}0&1\\1&-k_{1}\\\end{pmatrix}}{\begin{pmatrix}0&1\\1&-k_{0}\\\end{pmatrix}}}

とおき、ユークリッドの互除法の各過程で得られた k 0 {\displaystyle k_{0}} , k 1 {\displaystyle k_{1}} , k 2 {\displaystyle k_{2}} 等を用いて、右辺を計算すれば、左辺の x {\displaystyle x} , y {\displaystyle y} が求まり、これはベズーの等式

m x + n y = gcd ( m , n ) {\displaystyle mx+ny=\gcd(m,n)}

を満たす[6]

計算量

割って余りを取るという操作を最悪でも小さいほうの十進法での桁数の約 5 倍繰り返せば、最大公約数に達する(ラメの定理)。

最大公約数を求めるのに素因数分解すればよいと思うかもしれないが、この定理は(m, n が大きいときには)素因数分解をするよりもユークリッドの互除法によるほうがはるかに速いということを述べている。

実際、計算複雑性理論においては最大公約数を求めることは「容易な問題」として知られており、素因数分解は「困難な問題」であろうと考えられている。 入力された2つの整数のうち小さいほうの整数 n の桁数を d とすれば、ユークリッドの互除法では O(d) 回の除算で最大公約数が求められる。桁数 d は O(log n) なので、ユークリッドの互除法では O(log n) 回の除算で最大公約数が求められる。

連分数

上の例で出てきた、1071 と 1029 の最大公約数を求める過程は、次のように表せる。

1071 = 1029 × 1 + 42 , 1029 = 42 × 24 + 21 , 42 = 21 × 2. {\displaystyle {\begin{aligned}1071&=1029\times 1+42,\\1029&=42\times 24+21,\\42&=21\times 2.\end{aligned}}}

すなわち、

1071 1029 = 1 + 42 1029 , 1029 42 = 24 + 21 42 , 42 21 = 2. {\displaystyle {\begin{aligned}{\frac {1071}{1029}}&=1+{\frac {42}{1029}},\\{\frac {1029}{42}}&=24+{\frac {21}{42}},\\{\frac {42}{21}}&=2.\end{aligned}}}

したがって、

1071 1029 = 1 + 1 24 + 1 2 {\displaystyle {\frac {1071}{1029}}=1+{\frac {1}{24+{\frac {1}{2}}}}}

このように、 nm (n > m) の最大公約数を求める際のユークリッドの互除法の割り算の商は、有理数 n/m連分数展開になっている。

脚注

[脚注の使い方]

注釈

  1. ^ 『原論』第7巻では、1 を単位と定義し、2 以上の自然数をと定義している[1]
    定義
    1. 単位とは存在するもののおのおのがそれによって 1 とよばれるものである。
    2. 数とは単位から成る多である。
    ユークリッドの互除法は以下の命題 1 から 3 において述べられている。
    命題
    1. 二つの不等な数が定められ、常に大きい数から小さい数が引き去られるとき、もし単位が残されるまで、残された数が自分の前の数を割り切らないならば、最初の 2 数は互いに素であろう[2]
    2. 互いに素でない 2 数が与えられたとき、それらの最大公約数を見いだすこと[3]
    3. これから次のことが明らかである。すなわちもしある数が二つの数を割り切るならば、それらの最大公約数をも割り切るであろう。これが証明すべきことであった[4]
    4. 互いに素でない三つの数が与えられたとき、それらの最大公約数を見いだすこと[5]

出典

参考文献

  • 岩堀長慶『2次行列の世界』岩波書店〈数学入門シリーズ 4〉、1983年4月22日。ISBN 4-00-007634-5。 
  • ハイベア、メンゲ 編『ユークリッド原論』中村幸四郎寺阪英孝伊東俊太郎池田美恵訳・解説、共立出版  - 全13巻の最初の邦訳。
    • (ハードカバー)1971年7月。ISBN 4-320-01072-8
    • (縮刷版)1996年6月。ISBN 4-320-01513-4
    • (追補版)2011年5月。ISBN 978-4-320-01965-2
  • ハイベア、メンゲ 編『エウクレイデス全集』 (全5巻)、東京大学出版会  - 「エウクレイデス全集」の世界初の近代語訳。
    • 第2巻 原論VII-X、斎藤憲 訳・解説、2015年8月。ISBN 978-4-13-065302-2

関連項目

外部リンク

  • 『ユークリッドの互除法の証明と不定方程式』 - 高校数学の美しい物語
  • 日本大百科全書(ニッポニカ)『ユークリッドの互除法』 - コトバンク
  • Weisstein, Eric W. "Euclidean Algorithm". mathworld.wolfram.com (英語).
  • Hazewinkel, Michiel, ed. (2001), “Euclidean algorithm”, Encyclopedia of Mathematics, Springer, ISBN 978-1-55608-010-4, https://www.encyclopediaofmath.org/index.php?title=Euclidean_algorithm 
典拠管理データベース: 国立図書館 ウィキデータを編集
  • ドイツ