この章で学ぶこと
前章で学んだ gcd を、 素因数分解しなくても求める方法 が ユークリッドの互除法 です。 この強力な道具は、 古代ギリシャのユークリッド 「原論」 (約 2300 年前) に既に記載 されています。
- 整数の割り算定理 を確認 する
- ユークリッドの互除法 で gcd を求める
- 「割り算の余り」 で次々と割り続ける仕組 みを理解 する
- 拡張ユークリッド互除法 で ax+by=gcd(a,b) の整数解を求める
ポイント: 互除法は 「a を b で割った余りを使う」 だけのシンプルな操作。 計算量がとても少ないので、 大きな数にも効きます。
1. 整数の割り算定理
定理
整数 a と正の整数 b に対し、
a=bq+r(0≤r<b)
を満たす整数 q,r が ただ一通り 存在します。 q を 商、 r を 余り と呼びます。
例: 23=5⋅4+3 (商 4、 余り 3)、 100=7⋅14+2 (商 14、 余り 2)。
重要な性質
gcd(a,b)=gcd(b,r)(a=bq+r)
つまり 「a と b の gcd」 = 「b と余りの gcd」。 これが互除法の心臓部です。
性質の証明
a=bq+r より r=a−bq。 d が a,b の共通約数 なら d∣(a−bq)=r であり、 逆 に d が b,r の共通約数 なら d∣(bq+r)=a。 したがって 「a,b の共通約数」 と 「b,r の共通約数」 は完全 に一致 します。
2. ユークリッドの互除法
手順
gcd(a,b) を求める (a>b>0 とする) 手順:
- a を b で割り、 余り r1 を求める
- 次に b を r1 で割り、 余り r2 を求める
- 同様に続け、 余りが 0 になったときの直前の余り (= 割る方) が gcd
例題 1: gcd(252, 198)
| 割られる | 割る | 商 | 余り |
|---|
| 252 | 198 | 1 | 54 |
| 198 | 54 | 3 | 36 |
| 54 | 36 | 1 | 18 |
| 36 | 18 | 2 | 0 |
余りが 0 になったときの割る方が 18 なので、 gcd(252,198)=18。
検算: 252=22⋅32⋅7、 198=2⋅32⋅11、 共通 = 2⋅32=18 ○。
例題 2: gcd(2730, 663)
| 割られる | 割る | 商 | 余り |
|---|
| 2730 | 663 | 4 | 78 |
| 663 | 78 | 8 | 39 |
| 78 | 39 | 2 | 0 |
gcd=39。
例題 3: gcd(1071, 1029)
1071=1029⋅1+42、 1029=42⋅24+21、 42=21⋅2+0。 gcd=21。
3. 互除法の計算量
なぜ速いか
各ステップで数がおおむね 半分以下 になります (フィボナッチ数 が最悪ケース)。 したがって log2a ステップ程度で終わります。
a,b が 10 億程度でも数十回の割り算で gcd が求まるので、 コンピュータの暗号計算 (RSA など) でも中心的に使われます。
4. 拡張ユークリッド互除法
目標
整数 a,b に対し、
ax+by=gcd(a,b)
を満たす 整数解 (x,y) を求めます。 (この形は次章の 不定方程式 の出発点)。
解が存在すること
ベズーの等式: 任意 の整数 a,b (両方 0 でない) に対し、 ax+by=gcd(a,b) を満たす整数 x,y が必ず存在します。
求め方 (逆向き代入)
互除法を行い、 余りの式を上から順に並べ、 下から順に代入 していきます。
例題 4: 252x + 198y = 18 の整数解
まず互除法 (例題 1) の結果を並べます。
2521985436=198⋅1+54=54⋅3+36=36⋅1+18=18⋅2+0
下から逆算:
18=54−36⋅1=54−(198−54⋅3)=54⋅4−198=(252−198)⋅4−198=252⋅4−198⋅5
したがって x=4,y=−5 が 1 つの整数解。 検算: 252⋅4−198⋅5=1008−990=18 ○。
例題 5: 17x + 12y = 1
gcd(17,12)=1 なので整数解が存在。 互除法:
17=12⋅1+5、 12=5⋅2+2、 5=2⋅2+1、 2=1⋅2+0。
逆算:
1=5−2⋅2=5−(12−5⋅2)⋅2=5⋅5−12⋅2=(17−12)⋅5−12⋅2=17⋅5−12⋅7
したがって x=5,y=−7。 検算: 17⋅5−12⋅7=85−84=1 ○。
5. 章末まとめ
| 道具 | 公式 と手順 |
|---|
| 割り算定理 | a=bq+r、 0≤r<b |
| 互除法の核 | gcd(a,b)=gcd(b,r) |
| 計算法 | 余りが 0 になるまで割り続ける |
| 計算量 | O(logmin(a,b)) |
| 拡張版 | ax+by=gcd(a,b) の整数解を逆算で求める |
次の章では: 一次不定方程式ax+by=c の整数解を互除法を用いて求め、 一次合同式の基礎 を学びます。