Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

ユークリッドの互除法(ユークリッドノゴジョホ)とは | 意味や読み方など丁寧でわかりやすい用語解説

ユークリッドの互除法(ユークリッドノゴジョホ)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

ユークリッドの互除法 (ユークリッドノゴジョホウ)

英語表記

Euclidean algorithm (ユークリッドのアルゴリズム)

用語解説

ユークリッドの互除法は、二つの自然数の最大公約数を効率的に求めるためのアルゴリズムである。これは数学の分野で古くから知られている基本的なアルゴリズムの一つであり、紀元前300年頃にユークリッドが著した「原論」に記されていることからこの名が付いた。現代のコンピュータサイエンスにおいてもその重要性は高く、計算機科学の基盤となる多くのアルゴリズムに応用されている。具体的には、暗号技術における鍵生成、分数計算の簡約化、モジュラ逆数の計算、コンピュータグラフィックスにおける座標計算など、多岐にわたるIT分野で利用されている。その本質は、より大きな数をより小さな数で割った余りを利用して計算を簡略化していく点にある。この方法は、数を効率的に扱い、問題を解くための基本的な思考法を学ぶ上でも非常に有用である。

最大公約数とは、二つの自然数に共通する約数の中で最大のものを指す。例えば、12の約数は1, 2, 3, 4, 6, 12であり、18の約数は1, 2, 3, 6, 9, 18である。この二つの数の共通の約数は1, 2, 3, 6であり、その中で最大のものは6となるため、12と18の最大公約数は6である。ユークリッドの互除法は、このような最大公約数を、効率的かつ体系的な手順で求める手法を提供する。

ユークリッドの互除法の基本的な原理は、「二つの自然数aとb(a > bとする)の最大公約数は、bと、aをbで割った余りrの最大公約数に等しい」という性質に基づいている。この性質は、数学的に次のように説明できる。aとbの最大公約数をGとすると、aはGの倍数、bもGの倍数である。すなわち、a = Gk1、b = Gk2と表せる(k1, k2は整数)。ここで、aをbで割った商をq、余りをrとすると、a = qb + rという関係が成り立つ。この式にa = Gk1、b = Gk2を代入すると、Gk1 = qGk2 + r となり、これをrについて解くと、r = Gk1 - qGk2 = G(k1 - qk2)となる。このことから、rもGの倍数であることがわかる。つまり、aとbの最大公約数Gは、bとrの公約数でもある。さらに、bとrの任意の公約数G'を考えると、b = G'm1、r = G'm2と表せる。このとき、a = qb + r に代入すると、a = qG'm1 + G'm2 = G'(qm1 + m2)となり、aもG'の倍数であることがわかる。したがって、bとrの公約数はすべてaとbの公約数でもあり、その逆も成り立つため、aとbの最大公約数はbとrの最大公約数に等しいと言える。

この原理を利用したアルゴリズムの具体的な手順は以下の通りである。

  1. 二つの自然数aとbが与えられたとき、大きい方の数をa、小さい方の数をbとする。
  2. aをbで割り、その余りrを求める。
  3. もし余りrが0であれば、その時点でのbが最大公約数である。計算を終了する。
  4. もし余りrが0でなければ、元のbを新たなaとし、元の余りrを新たなbとして、手順2に戻り、同じ操作を繰り返す。

このプロセスは、余りが0になるまで続けられる。余りは常に元の数よりも小さくなるため、この操作は必ず有限回で終了し、最終的に最大公約数が求められる。

具体的な例として、1071と1029の最大公約数を求めてみよう。 まず、a = 1071、b = 1029とする。

  1. 1071を1029で割ると、商は1、余りは42となる(1071 = 1 × 1029 + 42)。 この時点で余り42は0ではないため、次のステップへ進む。
  2. 新たなaを1029、新たなbを42とする。 1029を42で割ると、商は24、余りは21となる(1029 = 24 × 42 + 21)。 この時点で余り21は0ではないため、次のステップへ進む。
  3. 新たなaを42、新たなbを21とする。 42を21で割ると、商は2、余りは0となる(42 = 2 × 21 + 0)。 余りが0になったため、計算を終了する。この時点でのb、すなわち21が1071と1029の最大公約数である。

ユークリッドの互除法は、この例からもわかるように、余りの計算を繰り返すだけで最大公約数を求められるため、非常に計算効率が良い。特に大きな数を扱う場合でも、余りが急速に小さくなるため、比較的少ないステップで結果に到達できる。これは、単純に大きい数から小さい数を引き続ける「減算による互除法」と比較して、剰余演算(割り算の余りを求める操作)を用いることで計算回数を大幅に削減できるためである。

IT分野において、このアルゴリズムは多岐にわたる場面で活用される。最も有名な応用例の一つは、公開鍵暗号方式であるRSA暗号における鍵生成である。RSA暗号では、素数pとqから導かれる公開鍵と秘密鍵のペアを作成する際に、ユークリッドの互除法が拡張されて使用される「拡張ユークリッドの互除法」が用いられる。これは、二つの整数aとbに対して、ax + by = gcd(a, b)を満たす整数xとyを求めるもので、特にモジュラ逆数を計算する際に不可欠な技術となる。モジュラ逆数は、ある数xに対して、xa ≡ 1 (mod n) となるaを求めることであり、暗号通信の基盤をなす重要な概念である。

また、コンピュータグラフィックスでは、格子点の問題や、周期的な模様を描画する際のパターン生成などに応用されることがある。分数計算を扱うソフトウェアでは、分数同士の足し算や引き算の後に結果を最も簡単な形に約分するために、分母と分子の最大公約数をユークリッドの互除法で求め、それによって両者を割る処理が行われる。プログラミングにおいては、再帰関数やwhileループを用いて比較的簡単に実装できるため、アルゴリズム学習の題材としてもよく用いられる。このように、ユークリッドの互除法は、そのシンプルな原理にもかかわらず、現代のITシステムを支える多くの技術に深く根ざしている重要なアルゴリズムなのである。

関連コンテンツ