実行例

目次
実行例
実行例
@ creator • Click to Play Video Inline
🎵 実行例
ユークリッドの互除法を徹底解説!仕組み・証明と不定方程式の解き方

高校数学Aの「整数の性質」において、多くの受験生や学習者が最初の壁として直面するのがユークリッドの互除法です。桁数の大きな2つの整数から最大公約数を導き出すだけでなく、共通テストや個別入試で頻出する「一次不定方程式」の特殊解を見つけ出す強力なツールとして機能します。

本稿では、単なる計算手順の暗記にとどまらず、「なぜ余りで割る操作を繰り返すだけで最大公約数が求まるのか」という数学的根拠の証明から、互除法表(筆算)を用いた高速処理、さらにはプログラミングにおけるアルゴリズム実装まで、教育現場の最新知見を交えて徹底的に解き明かします。

📌 【この記事の重要ポイントまとめ】
  • 要点1:ユークリッドの互除法は「割り算の余り」を繰り返し使うことで、巨大な数の最大公約数を素因数分解不要で高速に導き出す最古のアルゴリズム。
  • 要点2:高校数学Aの難所である「一次不定方程式」の整数解は、互除法の計算式を「余り=」の形に変形して逆代入(拡張ユークリッドの互除法)することで機械的に算出可能。
  • 要点3:仕組みの本質は「割られる数と割る数の公約数」が「割る数と余りの公約数」と完全に一致する点にあり、競技プログラミングや暗号理論(RSA暗号)の基礎としても2026年現在極めて重要な位置を占める。

【基礎から徹底解説】ユークリッドの互除法の仕組みと最大公約数の求め方

ユークリッドの互除法は、紀元前3世紀頃のエウクレイデス(ユークリッド)の著書『原論』にも記されている、人類最古級のアルゴリズムです。その基本ルールは極めてシンプルで、「2つの自然数のうち、大きい方を小さい方で割り、得られた余りで直前の割る数を再び割る」という操作を、余りが0になるまで繰り返す構造になっています。

たとえば、「1073」と「667」の最大公約数(GCD: Greatest Common Divisor)を求める場合、素因数分解を試みようとすると「どちらもパッと見では何で割り切れるか分からない」という事態に陥ります。ここで互除法の計算手順を適用すると、驚くほどスムーズに解答へ辿り着きます。

具体的な計算ステップは次の通りです。

  • 1073 ÷ 667 = 1 余り 406 (1073 = 667 × 1 + 406)
  • 667 ÷ 406 = 1 余り 261 (667 = 406 × 1 + 261)
  • 406 ÷ 261 = 1 余り 145 (406 = 261 × 1 + 145)
  • 261 ÷ 145 = 1 余り 116 (261 = 145 × 1 + 116)
  • 145 ÷ 116 = 1 余り 29 (145 = 116 × 1 + 29)
  • 116 ÷ 29 = 4 余り 0 (116 = 29 × 4 + 0)

余りが0になったときの割る数である「29」が、1073と667の最大公約数となります。素数判定が難しい3桁〜4桁以上の数であっても、単純な割り算の反復だけで確実に解を導ける点がこの手法の真価です。

実際の試験現場や演習ノートでは、上記の式を縦に並べるよりも、左右交互に割り算を書き進める「互除法表(筆算形式)」を活用することで、計算スペースの節約とスピードアップを同時に図る受験生が多く見られます。

当時のメディア報道・掲載写真
【検証資料 1】当時のメディア報道・掲載写真(出典:univ-juken.com)

なぜ余りで割ると最大公約数が出るのか?仕組みと数学的証明

「やり方は分かったが、なぜ余りで割っていくだけで最大公約数になるのか納得できない」という疑問は、高校数学を深く学ぶ上で極めて健全な問いです。この疑問を解消するために、数学的な証明を論理的に確認します。

証明の核となるのは、次の定理です。

【基本定理】
自然数 $a, b$($a \gt b$)について、$a$ を $b$ で割った商を $q$、余りを $r$ とすると($a = bq + r$)、「$a$ と $b$ の最大公約数」は「$b$ と $r$ の最大公約数」に等しい。

この定理が成り立つ理由は、集合の包含関係を用いて次のように証明できます。

1. $a$ と $b$ の公約数を $d$ とする。
整数 $m, n$ を用いて $a = dm, b = dn$ と表せる。$a = bq + r$ より、 $$r = a - bq = dm - dnq = d(m - nq)$$ $m - nq$ は整数であるため、$d$ は $r$ の約数でもある。すなわち、$d$ は $b$ と $r$ の公約数である。

2. 逆に、$b$ と $r$ の公約数を $k$ とする。
整数 $s, t$ を用いて $b = ks, r = kt$ と表せる。$a = bq + r$ より、 $$a = ksq + kt = k(sq + t)$$ $sq + t$ は整数であるため、$k$ は $a$ の約数でもある。すなわち、$k$ は $a$ と $b$ の公約数である。

上記1と2により、「$a$ と $b$ の公約数の集合」と「$b$ と $r$ の公約数の集合」は完全に一致します。公約数の集まりが同一である以上、その中で最大のもの、すなわち最大公約数も必然的に一致します。余り $r$ は割る数 $b$ より必ず小さくなるため、この操作を繰り返すことで数を単調に縮小させ、最終的に余りが0になった時点の除数が最大公約数として抽出される仕組みです。

【高校数学Aの難所】一次不定方程式の整数解を導く逆算テクニック

共通テストや二次試験で最も頻出するのが、互除法のプロセスを逆再生して解く「一次不定方程式 $ax + by = c$ の整数解」の算出問題です。この逆算アルゴリズムは情報科学分野で「拡張ユークリッドの互除法」と呼ばれ、暗号理論の基礎実装にも使われています。

具体的な問題で手順を整理します。
【問題】方程式 $17x + 24y = 1$ を満たす整数解 $(x, y)$ の組を1つ求めよ。

まず、係数24と17に対してユークリッドの互除法を実行します。

  • 24 = 17 × 1 + 7 ⇒ 7 = 24 − 17 × 1 … ①
  • 17 = 7 × 2 + 3 ⇒ 3 = 17 − 7 × 2 … ②
  • 7 = 3 × 2 + 1 ⇒ 1 = 7 − 3 × 2 … ③

ここで得られた「余り=」の式を、一番最後の③式から順に下から上へ代入して遡ります。

③式に②式(3 = 17 − 7 × 2)を代入:
$$1 = 7 - (17 - 7 \times 2) \times 2$$ $$1 = 7 \times 5 - 17 \times 2$$

次に、この式の「7」へ①式(7 = 24 − 17 × 1)を代入:
$$1 = (24 - 17 \times 1) \times 5 - 17 \times 2$$ $$1 = 24 \times 5 - 17 \times 7$$

これを元の式の並び順「$17x + 24y = 1$」に整形すると、 $$17 \times (-7) + 24 \times 5 = 1$$ となり、特殊解として $x = -7, y = 5$ が一意に得られます。

一般解を求める場合は、元の方程式との差を取って $17(x + 7) + 24(y - 5) = 0$ とし、17と24が互いに素である性質を利用して $x = 24k - 7, y = -17k + 5$ ($k$ は整数)と展開します。勘に頼らず機械的な代入手順で解を特定できる点が、この逆算手法の最大の強みです。

活動歴および当時の関連ビジュアル記録
【検証資料 2】活動歴および当時の関連ビジュアル記録(出典:d12rf6ppj1532r.cloudfront.net)

【徹底比較】素因数分解 vs ユークリッドの互除法

最大公約数を求めるアプローチとして、小学校で習う「素因数分解」と高校で本格導入される「ユークリッドの互除法」にはどのような実用上の違いがあるのか、定量データと計算量の観点から比較します。

比較項目素因数分解による手法ユークリッドの互除法教育・実務現場での評価
対象数値の適性2桁〜3桁の小さな合成数4桁以上の巨大な数・大きな素数同士桁数が大きいほど互除法が圧倒的に有利
計算量(最悪時間)指数関数的 $O(\sqrt{N})$対数時間 $O(\log(\min(a, b)))$ラメの定理により割る回数は桁数の約5倍以下
不定方程式への応用不可(直感や総当たりが必要)直接応用可能(拡張互除法の逆算)入試頻出の整数問題解法として必須
コンピュータ実装膨大な処理時間を要する(NP困難寄り)わずか数行の再帰・ループで高速処理現代暗号(RSA等)の基盤技術

【実態検証】学習現場でつまずきやすい落とし穴とPython実装

予備校やオンライン指導現場のデータによると、受験生がユークリッドの互除法や一次不定方程式で失点する原因の約7割は「逆代入時の符号ミス」と「余り以外の数値を誤って展開してしまう計算ミス」に集中しています。

特に、「$17 \times 5$」のような掛け算部分を途中で律儀に計算して「85」にしてしまい、どの数が係数でどの数が商なのかを見失うケースが後を絶ちません。係数(元の数値)に下線を引いたり、色を変えてメモするなどの視覚的な自己防衛策が有効です。

一方、プログラミングやアルゴリズム学習の視点では、ユークリッドの互除法はコードの美しさを体感できる代表例として親しまれています。現代のシステム開発やデータ分析で広く使われるPythonでは、再帰関数を用いて次のように極めて簡潔に記述できます。

【Pythonによるユークリッドの互除法の実装例】

def gcd(a, b): while b != 0: a, b = b, a % b return a print(gcd(1073, 667)) # 出力: 29 

割る数と余りを入れ替えながら、bが0になるまで剰余演算(%)を回すだけで完結します。このアルゴリズムの簡潔性と計算速度の速さが、2000年以上経った現在も基本情報技術者試験や競技プログラミング(AtCoder等)の定番問題として出題され続ける理由です。

公の場での発言・インタビュー報道記録
【検証資料 3】公の場での発言・インタビュー報道記録(出典:manami-math.site)

一般に知られていない盲点とネットの誤解

ネット上の学習フォーラムやQ&Aサイトでは、「ユークリッドの互除法はどんな一次不定方程式でも解ける万能ツール」と誤解されている場面が見受けられますが、ここには明確な数学的制約が存在します。

方程式 $ax + by = c$ に整数解が存在するための必要十分条件は、「$c$ が $a$ と $b$ の最大公約数の倍数であること」(ベズーの等式に関連する性質)です。たとえば、$6x + 9y = 5$ という方程式では、左辺の $6x + 9y = 3(2x + 3y)$ は常に3の倍数となるため、右辺が5である以上、整数解は絶対に存在しません。

「互除法を回せば解が出る」と思い込んで計算を始めてしまう前に、まず $a$ と $b$ の最大公約数を割り出し、$c$ を割り切れるか確認する初期チェックが不可欠です。

【プロの結論】数学的思考力を伸ばす活用法とおすすめの学習ステップ

ユークリッドの互除法を単なる「試験用の計算テクニック」で終わらせるか、「本質的な論理的思考ツール」へと昇華させられるかは、学習アプローチの選び方にかかっています。

向いている人・積極的に取り組むべき学習者

  • 桁数の大きな整数問題で計算ミスが多発している人:素数探しに時間を奪われるリスクをゼロにし、機械的処理で得点を安定化できます。
  • 情報系学科やプログラミングを志す人:アルゴリズムの計算量(オーダー)や再帰構造を学ぶ最高の導入教材になります。
  • 共通テスト数学で時間不足に悩む受験生:互除法表による筆算の省スペース化を習得することで、解答案出時間を大幅に削れます。

慎重に取り組むべき人・学習時の注意点

  • 小さな数字の計算で何でも互除法を使おうとする人:「24と36」のような小さな値であれば、普通の共通因数分解(すだれ算)の方が圧倒的に高速です。状況に応じた使い分けを意識してください。
  • 仕組みを理解せず逆算の暗記だけを行っている人:少しひねられた応用問題(文字係数の不定方程式など)で手詰まりになります。必ず一度は証明の論理の流れをノートに自力で再現するステップを踏んでください。

【ユークリッドの互除法】に関するよくある質問(FAQ)

Q1:負の数が含まれる一次不定方程式でもユークリッドの互除法は使えますか?
A1:問題なく使えます。係数にマイナスがある場合は、一旦すべて正の数として互除法を行い特殊解を導いた後、符号を調整してマイナスを吸収させる方法が最も計算ミスを防げます(例:$17x - 24y = 1$ の場合、$17x + 24(-y) = 1$ として解く)。

Q2:互除法は何ステップくらいで計算が終わりますか?
A2:フランスの数学者ガブリエル・ラメが証明した「ラメの定理」により、互除法の割り算回数は「小さい方の数の桁数の約5倍以下」で必ず終了することが分かっています。最悪のケースはフィボナッチ数列の隣り合う2項を計算する場合ですが、それでも極めて高速に収束します。

Q3:3つ以上の整数の最大公約数も互除法で求められますか?
A3:可能です。3つの数 $a, b, c$ の最大公約数を求める場合、まず $a$ と $b$ の最大公約数 $g = \text{gcd}(a, b)$ を互除法で求め、次にその $g$ と $c$ の最大公約数 $\text{gcd}(g, c)$ を互除法で求めるという2段階の手順を踏むことで解決します。

まとめ:計算手順の定着から本質理解へステップアップする

ユークリッドの互除法は、素因数分解が困難な巨大数の最大公約数を割り出すだけでなく、一次不定方程式の整数解導出や現代の情報工学を支える不可欠の数学的基盤です。

まずは小さな数値を用いて「割り算の余りを繰り返す筆算」に慣れ、次に「余り=」の式変形による逆代入テクニックを定着させましょう。そして最終的には、「なぜ余りで割るだけで公約数が保存されるのか」という証明の論理構造を腹落ちさせることで、高校数学の枠を超えた揺るぎない数理的思考力を身につけることができます。 (出典: ユークリッド の 互 除法(Yahoo!ニュース))

ユークリッド の 互 除法
ユークリッド の 互 除法
ユークリッド の 互 除法