実行例
高校数学Aの「数学と人間の活動(旧・整数の性質)」において、多くの学習者が最初の大きな壁として直面するのがユークリッドの互除法です。「公式の手順通りに割り算を繰り返せば答えは出るけれど、なぜそれで最大公約数が求まるのか納得できない」「一次不定方程式の特殊解を求める逆算でどうしても計算ミスをしてしまう」という悩みの声は、教育現場や受験相談でも後を絶ちません。
紀元前3世紀頃のアレクサンドリアの数学者エウクレイデス(ユークリッド)の著書『原論』に記されたこの手法は、人類最古のアルゴリズムの一つとして知られています。現代でも暗号理論(RSA暗号など)やプログラミングの基礎基盤として極めて重要な役割を果たしています。この記事では、互除法の直感的な仕組みから厳密な証明、一次不定方程式を迷わず解くテクニック、さらにはPythonによる実装まで、余すところなく徹底解説します。
📌 【この記事の重要ポイントまとめ】
- 要点1:ユークリッドの互除法は「2つの数の最大公約数は、大きい数を小さい数で割ったときの『余り』と『小さい数』の最大公約数に等しい」という原理に基づき、数を急激に小さくして最大公約数を一瞬で導き出す。
- 要点2:一次不定方程式($ax + by = c$)の特殊解は、互除法の商と余りの式を逆順に代入して整理する「拡張ユークリッドの互除法」を用いれば、どんなに係数が大きくても機械的に算出できる。
- 要点3:素因数分解が困難な3桁〜4桁以上の巨大な整数であっても、対数時間 $O(\log(\min(a,b)))$ の圧倒的スピードで処理できるため、共通テストから実務プログラミングまで必須の武器となる。
【原理と図解】なぜ割り算だけで最大公約数が求まるのか?仕組みを徹底解剖
互除法の本質を理解するために、まずは幾何学的なアプローチである図解(敷き詰め問題)から見ていきましょう。縦と横の長さがそれぞれ異なる長方形を、できるだけ大きな「合同な正方形」で隙間なく敷き詰める場面をイメージしてください。このとき敷き詰められる最大の正方形の1辺の長さこそが、縦と横の長さの最大公約数(GCD:Greatest Common Divisor)に他なりません。
例えば「縦330、横78」の長方形を考えます。この長方形から、短い辺である「1辺78の正方形」を切り取れるだけ切り取ります($330 \div 78 = 4$ あまり $18$)。すると、4個の正方形が取れた後に「縦18、横78」という小さな長方形が残ります。この残った小さな長方形をぴったり敷き詰める正方形は、元の大きな長方形も完全に敷き詰めることができます。次に、この「縦18、横78」に対して同様に1辺18の正方形を切り取ります($78 \div 18 = 4$ あまり $6$)。さらに残った「縦18、横6」に対して切り分けると($18 \div 6 = 3$ あまり $0$)、ついに余りが0になり、最後の正方形の1辺である「6」が最大公約数であると判明します。
この幾何学的な操作を数式で厳密に裏付けるのが、以下のユークリッドの互除法の定理です。
【定理】
2つの自然数 $A, B$($A \ge B$)について、$A$ を $B$ で割ったときの商を $q$、余りを $r$ とし、$A = Bq + r$ と表す。
このとき、$A$ と $B$ の最大公約数は、$B$ と $r$ の最大公約数に等しい。
すなわち、$\gcd(A, B) = \gcd(B, r)$ が成り立つ。
この定理の証明も極めて明快です。$A$ と $B$ の最大公約数を $G$ とおくと、$A = Ga$、$B = Gb$($a, b$ は互いに素)と表せます。これを $A = Bq + r$ に代入すると、$Ga = (Gb)q + r$ となり、変形すると $r = G(a - bq)$ となります。これは $r$ もまた公約数 $G$ を持つことを示しています。もし $b$ と $a - bq$ がさらに別の公約数 $d > 1$ を持っていたと仮定すると、$b = dk$、$a - bq = dm$ と表せ、$a = dm + bq = d(m + kq)$ となり、$a$ と $b$ が互いに素であることに矛盾します。したがって、$B$ と $r$ の最大公約数もまた厳密に $G$ と一致します。

【実践ステップ】大きな数も一瞬で解ける!計算手順と比較データ
手計算において互除法が真価を発揮するのは、2つの数が大きく、一見して素因数が見当たらないケースです。一般的な素因数分解による求め方と、ユークリッドの互除法、そして方程式解法へ拡張した手法の特徴を比較したデータが下表です。
| 手法・アルゴリズム | 適用対象・計算量 | 一般的な所要時間・負荷 | 編集部の見解・評価 |
|---|---|---|---|
| 素因数分解法 | 小さな整数(2〜3桁程度) 計算量:$O(\sqrt{N})$ | 大きな素数を含む場合、手計算で数分〜数十分詰まるリスク大 | 数が小さければ直感的だが、大きな数に対しては破綻しやすい。 |
| 基本ユークリッド互除法 | あらゆる自然数 計算量:$O(\log(\min(A,B)))$ | 4桁〜5桁の数でも、わずか4〜7回の筆算割り算で完結(数十秒) | 最大公約数を求める最速の手法。入試・実務問わず必須の基礎技術。 |
| 拡張ユークリッドの互除法 | 一次不定方程式 $ax + by = \gcd(a,b)$ の特殊解導出 | 互除法の筆算記録から逆算代入。慣れれば1〜2分で確定 | 高校数学Aの整数分野および公開鍵暗号の逆元計算における中核。 |
実際に大きな数の計算問題を解いてみましょう。例として「1173 と 527 の最大公約数」を求めます。これらを初見で素因数分解しようとすると、どちらもパッと見でどの素数で割れるか分からず途方に暮れてしまいますが、互除法なら機械的な割り算だけで即座に解決します。
- $1173 \div 527 = 2$ あまり $119 \quad \rightarrow \quad 1173 = 527 \times 2 + 119$
- $527 \div 119 = 4$ あまり $51 \quad \rightarrow \quad 527 = 119 \times 4 + 51$
- $119 \div 51 = 2$ あまり $17 \quad \rightarrow \quad 119 = 51 \times 2 + 17$
- $51 \div 17 = 3$ あまり $0 \quad \rightarrow \quad 51 = 17 \times 3 + 0$
余りが0になった直前の割る数、すなわち「17」が最大公約数です。素数17の倍数であることを見抜くのは暗算では困難を極めますが、互除法の割り算を用いれば、わずか4回の筆算ステップで確実に正解へ到達できます。
【一次不定方程式の特殊解】「戻す」計算で迷子にならないための鉄則
高校数学Aで学習者が最も苦戦するのが、一次不定方程式の特殊解を求める応用問題です。例えば、$119x + 51y = 17$ のような方程式を満たす整数解 $(x, y)$ を1組求める際、勘で当てはめるのは困難です。
ここで用いるのが、互除法の割り算式を「余り =」の形に変形し、下から上へと順番に代入していく拡張ユークリッドの互除法のテクニックです。
先ほどの計算プロセスから、余りが0になった式の「1つ手前」までの式を「余り =」に変形します。
- 式①:$119 = 51 \times 2 + 17 \quad \rightarrow \quad 17 = 119 - 51 \times 2$
- 式②:$527 = 119 \times 4 + 51 \quad \rightarrow \quad 51 = 527 - 119 \times 4$
ここから、ターゲットである「17」を作ります。式①の「51」の部分に式②をそのまま代入します。
$$17 = 119 - (527 - 119 \times 4) \times 2$$
ここで絶対にやってはいけないのは、途中の数字($527 \times 2$ など)を掛け算して普通の数値に戻してしまうことです。あくまで「119」と「527」を文字(変数)のように扱って同類項をまとめます。
$$17 = 119 \times 1 - 527 \times 2 + 119 \times 8$$
$$17 = 119 \times 9 + 527 \times (-2)$$
$$527 \times (-2) + 119 \times 9 = 17$$
これにより、方程式 $527x + 119y = 17$ の特殊解が $(x, y) = (-2, 9)$ であることが極めて機械的かつ正確に求まりました。この代入テクニックさえ型として身につければ、どんなに大きな係数が登場しても迷子になることはありません。

【実態検証】高校数学の現場と受験生がハマる「3つの落とし穴」
予備校の指導現場や模試の採点データ、知恵袋などのQ&Aコミュニティを精査すると、ユークリッドの互除法で失点する受験生には明確な3つの共通パターンが存在することが浮き彫りになっています。
第1の落とし穴は、「商」と「余り」を代入時に取り違えるミスです。筆算を殴り書きしているうちに、$A = Bq + r$ の $q$(割った回数)と $B$(割る数)を取り違えて代入し、途中で係数がまったく合わなくなるケースが頻発しています。これを防ぐためには、計算用紙に「$余り = 割られる数 - 割る数 \times 商$」のフォーマットを崩さず、商のほうを必ずカッコで囲むなどのマイルールを徹底することが有効です。
第2の落とし穴は、一次不定方程式の右辺が最大公約数の倍数になっていない場合の混乱です。方程式 $ax + by = c$ が整数解を持つための必要十分条件は、「$c$ が $\gcd(a, b)$ の倍数であること」です。まずは $\gcd(a, b) = g$ に対する解 $ax_0 + by_0 = g$ を求め、その両辺を $c/g$ 倍するという手順を踏む必要がありますが、この変換を失念して解なしのトラップに引っかかる学習者が後を絶ちません。
第3の落とし穴は、「一般解」への拡張時の符号ミスです。特殊解 $(x_0, y_0)$ を求めた後、$a(x - x_0) = -b(y - y_0)$ と変形して一般解を導く際、$a$ と $b$ を最大公約数で割り切った「互いに素な状態」にし忘れたり、符号をプラスマイナス逆にしてしまうケアレスミスが共通テスト等の大問後半で致命傷となっています。
【プログラミング実装】Pythonで書くユークリッドの互除法と競技プログラミングの現場
ITエンジニアや競技プログラミング(AtCoder等)の世界において、ユークリッドの互除法は避けて通れない最重要アルゴリズムの一つです。Pythonにおける実装は驚くほどシンプルで、わずか数行で記述できます。
再帰関数を用いたPythonコード例:
def gcd(a: int, b: int) -> int: """ユークリッドの互除法を用いて最大公約数を返す""" while b != 0: a, b = b, a % b return a print(gcd(1173, 527)) # 出力: 17
Pythonの標準ライブラリには math.gcd(a, b) が組み込まれており、内部的にもこの洗練されたアルゴリズムがC言語レベルで高速に実行されています。
なぜこのアルゴリズムがこれほど重宝されるのか。それは計算量の圧倒的な少なさにあります。1844年に数学者ガブリエル・ラメが証明した「ラメの定理」によると、互除法における割り算の回数は、小さい方の数の桁数の高々5倍以下であることが保証されています。最悪の入力ケース(フィボナッチ数列の隣り合う2項)であっても、ステップ数は対数スケール $O(\log(\min(a, b)))$ に収まります。100桁を超えるような天文学的な巨大数であっても、現代のコンピュータならミリ秒未満で最大公約数を弾き出せる理由がここにあります。

一般に知られていない盲点とネットの誤解
ネット上の学習フォーラムや解説動画などで時折見られる誤解として、「ユークリッドの互除法は正の整数にしか使えない」というものがあります。しかし数学的には、負の整数に対しても互除法は全く同様に適用可能です。
除法の原理において、余り $r$ は常に $0 \le r < |B|$ となるように定義されるため、負の数が含まれている場合は絶対値をとって最大公約数を求めれば問題ありません。また、多項式環においても「整式の除法」を用いることで、2つの多項式の最大公約多項式を求める多項式の互除法へとシームレスに拡張されます。単なる受験テクニックにとどまらず、代数学全般を貫く普遍的なフレームワークであることを認識しておくと、数学の視野が一気に広がります。
【プロの結論】数学的思考を育む学習アプローチとおすすめの習得ルート
ユークリッドの互除法を真に自分の武器にするためには、丸暗記を排した正しい学習ステップを踏む必要があります。向き不向きや習熟度に応じた判断基準を以下に整理します。
- 今すぐ互除法の本質理解を優先すべき人:
- 共通テスト数学で「整数の性質」を選択する受験生(時間短縮の恩恵が極めて大きい)
- 基本情報技術者試験や競技プログラミングを始めたいIT初学者
- 3桁以上の因数分解や約分で計算が止まってしまう人
- 一旦立ち止まって基礎に戻るべき人:
- 除法の原理($A = Bq + r$ の意味)が曖昧な人(まず割り算の等式変形を定着させるべき)
- 「互いに素」という概念の意味がピンときていない人
単に手順を暗記して満足するのではなく、「なぜ余りとの公約数に置き換えてよいのか」という証明の論理と、長方形の分割イメージを行き来しながら手を動かすこと。それが、入試やプログラミングの現場でどんな変則問題が出題されても動じない真の数学力を養う決定打となります。
【ユークリッドの互除法】に関するよくある質問(FAQ)
Q1:素因数分解ができるなら、わざわざ互除法を使わなくても良いのではないでしょうか?
A1:数が小さいうちは素因数分解でも解けますが、「851と1147の最大公約数」のように、割れる素数が23や37といった大きな値の場合、手計算での素因数分解は極めて困難になります。互除法を用いれば、素因数に何が含まれているかを知らなくても、割り算だけで確実に最大公約数を特定できるため、圧倒的に有利です。
Q2:一次不定方程式で、特殊解が問題集の模範解答と違ってしまいました。不正解ですか?
A2:不正解ではありません。一次不定方程式には無数の整数解が存在するため、計算の進め方によって異なる特殊解(例えば $(x, y) = (2, -3)$ と $(-3, 4)$ など)が導かれることは日常茶飯事です。一般解を導いたときに表される整数の集合が一致していれば、どの特殊解を使って解答を作成しても数学的に満点となります。
Q3:3つ以上の整数の最大公約数を互除法で求めることはできますか?
A3:可能です。3つの数 $A, B, C$ の最大公約数を求める場合、まず $\gcd(A, B) = G_1$ を互除法で求め、次にその結果と残りの数で $\gcd(G_1, C)$ を計算します。「2つずつ組み合わせて互除法を繰り返す」ことで、いくつの整数であっても最大公約数を求めることができます。
Q4:共通テスト本番で互除法の逆算代入を素早く解くコツはありますか?
A4:合同式(mod)を併用するか、互除法の計算過程を行列のような2列の表(組み立て除法に似た逆算テーブル)に整理して解く裏ワザがあります。ただし、符号ミスや代入順の混乱を防ぐ最も確実な方法は、本記事で解説した「余り=」の形に変形し、同類項を丁寧にまとめる標準手順を1〜2分以内で正確にこなせるまで演習を積むことです。
まとめ:アルゴリズムの原点をマスターして数学の壁を突破しよう
ユークリッドの互除法は、古代ギリシャの幾何学的ひらめきと、現代のデジタル情報社会を支える高度な代数学が美しく結実した傑作アルゴリズムです。その原理を「図解」と「厳密な証明」の両面から肚落ちさせ、一次不定方程式への応用手順を型としてマスターすることは、数学Aの得点力を飛躍的に引き上げるだけでなく、論理的思考力を根本から鍛え直す絶好の契機となります。
まずは紙とペンを用意し、身近な2つの大きな数を使って互除法のステップを一度書き出してみてください。割り算がピタリと余り0に収束するその美しさを体感できたとき、整数問題に対する苦手意識は確固たる自信へと変わっているはずです。 (出典: ユークリッド の 互 除法(Yahoo!ニュース))