ユークリッドの互除法とは?最大公約数の求め方と余りが0になる仕組みを徹底解説
2つの自然数について、素因数分解では歯が立たないような桁数の大きい数値であっても、割り算の余りを繰り返すだけで確実に最大公約数(GCD)を導き出せる画期的な計算法が「ユークリッドの互除法」です。高校数学の「数学A(整数問題)」における重要単元として広く親しまれているだけでなく、現代の暗号理論やプログラミングの現場でも不可欠な中核アルゴリズムとして機能しています。
一見すると機械的な作業に見えるこの計算手順ですが、「なぜ割る数と余りの関係だけで最大公約数が求まるのか」「なぜ必ず有限回で余りが0に収束するのか」という論理的根拠を理解できている人は多くありません。紀元前より受け継がれる知恵の本質から、一次不定方程式への応用アプローチまでを論理的に紐解きます。
📌 【この記事の重要ポイントまとめ】
- 要点1:ユークリッドの互除法は2つの自然数の最大公約数を「割り算の余りの繰り返し」で求める紀元前『原論』由来の最古のアルゴリズム。
- 要点2:「aとbの公約数は、除数bと剰余rの公約数と完全に一致する」という等価性により、計算対象の数値を極限まで圧縮できる。
- 要点3:高校数学の整数問題で頻出する「一次不定方程式(ax + by = c)」の整数解を特定する強力な逆算ツールとして応用される。
【起源と定義】紀元前300年『原論』に記された最古のアルゴリズム
数学の歴史において「明確な手順として体系化された最古のアルゴリズム」と称されるのが、古代ギリシャの数学者エウクレイデス(ユークリッド)が紀元前300年頃に著した『原論(Elements)』第7巻の命題1から3に記述されている計算法です。
現代でこそ「アルゴリズム」という言葉はコンピュータサイエンスの用語として日常化していますが、古代ギリシャでは「線分の長さを測り取る操作」として幾何学的に捉えられていました。2本の異なる長さの線分が存在するとき、短い方の線分で長い方の線分を繰り返し削り取っていき、最後に両方を過不足なく測り切れる共通の単位(最大公約数)を見出すという幾何的発想がその原点です。
数学的な定義として、2つの自然数 a, b (a ≧ b) において、a を b で割ったときの商を q、剰余を r としたとき、以下の関係式が成り立ちます。
a = bq + r(0 ≦ r < b)
このとき、「a と b の最大公約数は、除数 b と剰余 r の最大公約数に等しい」という性質が成立します。この操作を剰余が 0 になるまで反復適用することで、最終的に残った除数が求める最大公約数(GCD: Greatest Common Divisor)となります。
【基本原理】なぜ「割る数と余り」の最大公約数と等しくなるのか?(証明)
多くの学習者が疑問を抱く核心、「なぜ a と b の最大公約数を求める作業を、b と余り r の問題にすり替えてよいのか」という証明を整理します。
自然数 a, b について、a を b で割った商を q、剰余を r とすると、等式 a = bq + r(ただし 0 ≦ r < b)が成立します。このとき、a と b の最大公約数を G、b と r の最大公約数を G' と置き、G = G' であることを示します。
まず、G は a と b の公約数であるため、整数 m, n を用いて a = Gm, b = Gn と表せます。これを剰余の式 r = a - bq に代入すると、以下のようになります。
r = Gm - (Gn)q = G(m - nq)
m - nq は整数であるため、G は r の約数でもあります。すなわち G は b と r の公約数です。G' は b と r の「最大」公約数であるため、G ≦ G' が成り立ちます。
逆に、G' は b と r の公約数であるため、整数 s, t を用いて b = G's, r = G't と表せます。これをもとの等式 a = bq + r に代入します。
a = (G's)q + G't = G'(sq + t)
sq + t は整数であるため、G' は a の約数でもあります。すなわち G' は a と b の公約数です。G は a と b の「最大」公約数であるため、G' ≦ G が成り立ちます。
G ≦ G' かつ G' ≦ G であることから、必然的に G = G' となり、a と b の最大公約数と、除数 b と剰余 r の最大公約数が完全に一致することが論理的に証明されます。
【具体例で検証】素因数分解とユークリッドの互除法の計算効率比較
桁数が大きい2つの自然数において、素因数分解による手法とユークリッドの互除法では、計算の到達速度に圧倒的な差が生じます。例として「1073 と 1003」の最大公約数を求めるケースで両者のアプローチを比較します。
1073 や 1003 は、2, 3, 5 といった小さな素数では割り切れません。素因数分解を試みる場合、7, 11, 13, 17, 19, 23, 29, 31 と順番に素数判定を繰り返す必要があり、膨大な計算コストを要します。
一方、ユークリッドの互除法を用いると、わずか3回の割り算で答えに到達します。
1. 1073 を 1003 で割る:1073 = 1003 × 1 + 70(剰余 70)
2. 除数 1003 を 剰余 70 で割る:1003 = 70 × 14 + 23(剰余 23)
3. 除数 70 を 剰余 23 で割る:70 = 23 × 3 + 1(剰余 1)
4. 除数 23 を 剰余 1 で割る:23 = 1 × 23 + 0(剰余 0)
剰余が 0 になったときの除数は「1」であるため、最大公約数は 1(互いに素)であることが極めて短時間で判明します。
| 比較項目 | 素因数分解によるアプローチ | ユークリッドの互除法 |
|---|---|---|
| 基本的な計算手法 | 各数値を素数の積に分解し共通因数を探す | 大きい数を小さい数で割り、余りを循環的に除算 |
| 小さな数値(2桁程度) | 九九の範囲で素早く直感的に算出可能 | 手順を踏むため、かえって手数が多く感じられる |
| 巨大な数値(3桁以上) | 大きな素数の発見が困難で計算停止リスクが高い | 桁数が大きくても四則演算のみで確実に収束する |
| 計算量の指標 | 入力値の大きさに対し指数関数的に増加 | 剰余が急速に縮小するため極めて高速(対数的) |
| 主な用途と応用先 | 中学数学、分数の単純な約分、暗算 | 高校数学の整数問題、RSA暗号、プログラム実装 |
【ステップ解説】確実に解ける互除法の計算手順と「余り0」の必然性
互除法の手順は極めてシンプルですが、機械的に処理するための明確なルールが存在します。
1. 大小関係の整理:2つの自然数のうち、大きい方を a、小さい方を b とする。
2. 第1の剰余計算:a ÷ b を行い、商 q1 と 剰余 r1 を求める(a = b × q1 + r1)。
3. 除数と剰余の交代:次に「元の割る数 b」を「余り r1」で割り、新たな余り r2 を求める。
4. 反復処理:直前の「割る数」を直前の「余り」で割る操作を反復する。
5. 終了条件:割り切れて「余りが 0」になった瞬間の【割る数(除数)】が最大公約数となる。
なぜこの操作が無限ループに陥らず、必ず有限回で終了するのかという点についても、数学的な明確な裏付けがあります。
割り算の定義から、剰余 r は除数よりも必ず小さくなります。すなわち、各ステップで生じる剰余の列は、
b > r1 > r2 > r3 > ... ≧ 0
という厳格な単調減少の整数列を形成します。自然数は 0 未満にはならないため、どれほど巨大な数値から開始したとしても、有限回のステップ(実際には非常に少ない回数)で必ず余りが 0 に到達します。
【高校数学の実戦】一次不定方程式(ax + by = c)への応用と逆算アルゴリズム
高校数学の「数学A」で学習するユークリッドの互除法の真価は、最大公約数を求めること自体にとどまらず、一次不定方程式の整数解(特殊解)を求める逆算プロセスにあります。
例えば、「163x + 78y = 1」を満たす整数 (x, y) の組を1つ見つけよという典型的な入試問題では、当てはめ(試行錯誤)で解を見つけることは困難です。ここで互除法の計算過程を「余り =」の形に変形して逆代入する手法が威力を発揮します。
まず、163 と 78 に対して互除法を実行します。
163 = 78 × 2 + 7 → 7 = 163 - 78 × 2 … ①
78 = 7 × 11 + 1 → 1 = 78 - 7 × 11 … ②
7 = 1 × 7 + 0(互除法終了、最大公約数は 1)
ここで得られた ② 式の「7」の部分に、① 式を代入して逆順に展開します。
1 = 78 - (163 - 78 × 2) × 11
1 = 78 - 163 × 11 + 78 × 22
1 = 163 × (-11) + 78 × (1 + 22)
163 × (-11) + 78 × 23 = 1
この結果から、特殊解の1つが x = -11, y = 23 であることが機械的な代入操作のみで導出できます。この手法は「拡張ユークリッドの互除法」と呼ばれ、コンピュータプログラムでモジュラ逆数を計算する際にも広く利用されています。
【ユークリッドの互除法】に関するよくある質問(FAQ)
Q1:負の数や小数が含まれる場合でもユークリッドの互除法は使えますか?
A1:本来の定義は正の整数(自然数)を対象としていますが、負の整数に対しても絶対値をとることで同様に最大公約数を求められます。一方で、小数の場合は「割り切れる」「余り」という整数の除法原理がそのまま成立しないため適用できません。小数の公約数を扱う場合は、10の累乗を掛けて整数に直してから処理する必要があります。
Q2:3つ以上の数値の最大公約数を求めたい場合はどうすればよいですか?
A2:3つの数 a, b, c の最大公約数を求める場合、まず任意の2数 a と b に対して互除法を行い GCD(a, b) = G を求めます。続いて、その結果得られた G と残りの c に対して再度互除法を行い GCD(G, c) を算出します。この結合法則を利用することで、4つ以上の数値でも同様の手順で確実に求められます。
Q3:なぜ割る数と割られる数の順序を間違えても正しい答えが出るのですか?
A3:仮に小さい数を大きい数で割ってしまった場合(例えば 78 ÷ 163)、商が 0 で余りがそのまま 78(78 = 163 × 0 + 78)となります。次のステップでは「直前の除数 163」を「余り 78」で割る操作に移るため、1手ステップが増えるだけで自動的に大小関係が正常に入れ替わります。そのため、最初の入力順序が逆であっても最終的な計算結果に影響はありません。
まとめ:アルゴリズム思考の原点として理解する意義
ユークリッドの互除法は、単なる受験数学の解法テクニックにとどまらず、「複雑で巨大な問題を、同値性を保ったまま小さな問題へと段階的に縮小していく」というアルゴリズム設計の最も根源的な思考モデルを提示しています。
割る数と余りの関係性を数式として捉え、有限回のステップで必ず答えに収束する構造を把握することは、論理的思考力の基礎となります。高校数学の整数問題対策としてはもちろん、現代のデジタル社会を支える公開鍵暗号(RSA暗号など)の土台を支える数学的教養として、その仕組みを本質から理解しておく価値があります。 (出典: ユークリッド の 互 除法(Yahoo!ニュース))