回 3-1 分野 3 整数と余り
ユークリッドの
読み終えたら最大公約数を
この頁の流れ
約数と
1071 / 1029 は、 どこまで 約分できるのか
分子と
1071 と
最大公約数は、
約数、 素数、 最大公約数とは
言葉を 4 つそろえます。
| 言葉 | 意味 | 12 と |
|---|---|---|
| 約数 | その数を | 12 の |
| 素数 | 約数が | 2, 3, 5, 7, 11, 13 |
| 最大公約数 (gcd) | 両方の | 6 |
| 最小公倍数 (lcm) | 両方の | 36 |
2 つの数の
最大公約数と
約数を
ユークリッドの 互除法の手順
互除法は、
- 大きい方の
数 a を、 小さい方の 数 b で 割り、 余り r を出す - r が
0 なら、 b が 最大公約数。 ここで止まる - r が
0 でなければ、 a を b に、 b を r に 置き換えて、 1 に戻る
1071 と
| 回 | 割られる数 | 割る数 | 商 | 余り |
|---|---|---|---|---|
| 1 | 1071 | 1029 | 1 | 42 |
| 2 | 1029 | 42 | 24 | 21 |
| 3 | 42 | 21 | 2 | 0 |
3 回目で
なぜ余りに 置き換えても 答えが 変わらないのか
a を
- a と
b の 両方を 割り切る 数は、 r = a − b × q も割り切る - b と
r の 両方を 割り切る 数は、 a = b × q + r も割り切る
ですから、
この
動かして確かめる
1 本目は、
動かす 互除法の割り算を 1 回ずつ出す
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
1 1071 = 1029 * 1 + 42
2 1029 = 42 * 24 + 21
3 42 = 21 * 2 + 0
最大公約数 21
割り算の回数 3divmod(a, b) は、
2 本目は、
動かす 1 つずつ試す求め方と回数を比べる
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
1071 1029 gcd 21 21
試す 1009
互除法 3
123456 7890 gcd 6 6
試す 7885
互除法 7
999983 999979 gcd 1 1
試す 999979
互除法 4
1000000 999999 gcd 1 1
試す 999999
互除法 2どの
3 本目は、
動かす 一番手間のかかる組と桁数
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
F10 桁 2 回数 8 桁*5 10
F20 桁 4 回数 18 桁*5 20
F30 桁 6 回数 28 桁*5 30
F40 桁 8 回数 38 桁*5 40隣り合う
4 本目は、math.gcd と math.lcm と
動かす 最小公倍数と math.gcd で照らす
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
12 18
自作 6 36
math 6 36
1071 1029
自作 21 52479
math 21 52479
8 15
自作 1 120
math 1 120自分でmath の
拡張した 互除法と 不定方程式
互除法の
動かす 拡張した互除法で x と y を出す
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
g 21 x -24 y 25
21
631071 × (−24) + 1029 × 25 = 21 です。
ax + by = c の
商を 並べると 連分数になる
互除法の
動かす 商を集めて連分数を作り、元に戻す
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
商 [1, 24, 2]
戻した数 51/49
約分した数 51/49商 [1, 24, 2] から
仕事と コンテストで どう使うか
最大公約数と
- 分数の約分。Python の
fractions.Fraction(1071, 1029)は、中で 最大公約数で 割り、 51 / 49 として持つ - 周期を
そろえる。12 秒ごとと 18 秒ごとに動く 2 つの処理が 次に 同時に 動くのは、 最小公倍数の 36 秒後 - 画面の比。
1920 × 1080 を 最大公約数 120 で 割ると、 16 対 9 - 暗号の
鍵の 確かめ。 RSA の 鍵の 決まりを 書いた RFC 8017 は、 公開の 指数 e が λ(n) と 互いに 素 (最大公約数が 1) である ことと、 秘密の 指数 d が e × d ≡ 1 (mod λ(n)) を 満たす ことを 求めている。 互いに 素かは 最大公約数で、 d は 拡張した 互除法で出す - 競技プログラミング。
分数を 約分して持つ、配列の全部の 数の 最大公約数を 取る、 互いに 素かを 数える、の形でよく出る
Python では、pow(e, -1, m) で、
動かす 小さな数で鍵の決まりを確かめる
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
λ(n) 780
gcd(e, λ) 1
d 413 e*d mod λ 1e = 17 と
互除法は どこで つまずくか
互除法
0 と負の数
gcd(a, 0) はmath.gcd のmath.gcd をmath.gcd は、
小数で使う
0.6 と% を使うと、0.6 % 0.4 は
先に 掛けて 大きな数を作る
lcm を
よくある問い
ユークリッドの 互除法は 何回で 終わりますか
割り算の
素因数分解で 求めるのと、 どちらが 速いですか
大きな
3 つ以上の 数の 最大公約数は どう 出しますか
2 つずつ順にmath.gcd は
再帰と while の どちらで 書けばいいですか
どちらでも
確認クイズ
答えだと
1 問目
252 と
2 問目
最大公約数が
3 問目
1071x + 1029y = 10 を
説明課題
「互除法で、
自分の
この回の 先の一歩
分数の
もっと深く
この
一次資料
どれも 2026年10月30日に開いて、
- Euclid's Elements, Book VII, Proposition 2 (D. E. Joyce、
Clark University、英語) 。互いに素でない 2 つの数の 最大の 共通の 量を、 小さい方を 大きい方から 引き続けて 求める命題 - math (Python 3.14 公式文書、英語)。
math.gcdが指定した 整数の 最大公約数を 返すこと、 全部が 0 なら 0 を 返すこと、 3.9 から いくつでも 数を 渡せること、 math.lcmがあること - Built-in Functions の
pow (Python 公式文書、英語) 。3.8 から、第 2 引数を 負に して 剰余の 逆元を 出せること - RFC 8017 PKCS #1 v2.2 (IETF、英語、2016年11月)。RSA の
公開の 指数 e が GCD(e, λ(n)) = 1 を 満たし、 λ(n) が 素数から 1 を 引いた 数の 最小公倍数である こと、 秘密の 指数 d が e × d ≡ 1 (mod λ(n)) を 満たすこと - ユークリッドの
互除法 (Wikipedia 日本語版) 。割り算の回数が、 小さい方の 10 進の 桁数の 約 5 倍で 最大公約数に 達する こと (ラメの 定理)、 互除法の 商が 連分数展開になること
次へ
分野 3 整数と余りの回
- 3-1最大公約数と互除法約数、
素数、 ユークリッドの互除法この回 - 3-2余りと合同式余りの
足し算と 掛け算、 繰り返し二乗法準備中 - 3-3素数を速く探す試し割りは
√n まで、 エラトステネスの篩準備中