01
足し算 — n が何であっても必ず行儀がよい
わかっていること: どんな法でも構いません。mod n の加算・減算・乗算はつねに定義され、どの元にも加法の相手がいます。
確認すること: 13 + 5 ≡ 6 (mod 12)
計算例: 12 時間の時計:13 + 5 = 18、そして 18 mod 12 = 6。1 時の 5 時間後は 6 時です。
このケースを開く: 時計 mod 12インタラクティブな数学・理科レッスン (ノ◕ヮ◕)ノ*:・゚✧
合同算術 — いつ割れて、いつ割れないのか
mod n で計算するとは余りだけを残すことで、足し算・引き算・掛け算は無傷で生き残ります。生き残らないのは割り算です。ある数で割れるか、つまり逆元を持つかは、その数が n と因数を共有するかだけで決まります。素数の法が合成数の法とまるで違う振る舞いをするのはそのためです。どのケースかは、演算と n がどんな数かで決まります。
01
わかっていること: どんな法でも構いません。mod n の加算・減算・乗算はつねに定義され、どの元にも加法の相手がいます。
確認すること: 13 + 5 ≡ 6 (mod 12)
計算例: 12 時間の時計:13 + 5 = 18、そして 18 mod 12 = 6。1 時の 5 時間後は 6 時です。
このケースを開く: 時計 mod 1202
わかっていること: n が素数。すると 0 でない元は n と因数を共有せず、どれも乗法の逆元を持ちます。
確認すること: φ(7) = 6 ⇒ gcd(a, 7) = 1 ∀a ≠ 0
計算例: mod 7:3 × 4 = 12 ≡ 5。0 でない 6 つの値 1…6 はすべて可逆で、乗算表には最初の行を除いて 0 が現れません。
このケースを開く: 素数 mod 703
わかっていること: n が合成数。n と互いに素な値だけが逆元を持ち、残りは零因子で、それらで割ることに意味はありません。
確認すること: 2 × 3 ≡ 0, φ(6) = 2
計算例: mod 6:2 × 4 = 8 ≡ 2。gcd(2,6) = 2、gcd(4,6) = 2 なので 2 も 4 も可逆ではありません。単元は 1 と 5 だけ、6 つのうち 2 つです。
このケースを開く: 合成数 mod 604
わかっていること: mod n での累乗。素数 p と p で割り切れない a について、指数は p − 1 を割る周期で巡ります。
確認すること: ap−1 ≡ 1 (mod p)
計算例: mod 13:7¹² ≡ 1。フェルマーの小定理が 1 から 12 までのどの底についてもこれを保証し、大きな累乗を一つも計算せずに済みます。
このケースを開く: フェルマー mod 13712 を書き下すことなく 712 mod 13 を計算せよ。これは n = 13, a = 7, k = 12 における ak 演算であり、グリッドは ak mod 13 の完全な表である。
712 は 13 841 287 201 であり、0 から 12 の間の値になるはずの答えに対して 11 桁の数である。剰余演算は乗法を行っても保たれる。積の剰余は各因数の剰余のみに依存するため、最後ではなく各ステップの後に剰余をとる(簡約する)ことができる。
四則演算を行う前に、フェルマーの小定理によって答えは確定している。素数 p と p で割り切れない a に対して、ap−1 ≡ 1 であり、ここでは p = 13 かつ k は正確に p − 1 であるため、結果は 1 となる。したがって、以下の記述は答えの探求というよりも定理の検証である。
自乗(2 乗)は指数を 2 倍にするため、3 回の自乗で 78 に達する。各行は次の行が始まる前に剰余をとる(簡約する)ため、計算全体のどの数値も 100 を超えない。
12 は 8 + 4 であり、これらの累乗は両方とも途中で計算されているため、あと 1 回の乗法で完了する。12 個の 7 を左から右へ順に掛け合わせる場合に必要な 11 回の乗法に対して、合計 4 回の乗法で済む。そして、この計算量の削減は法(モジュラス)ではなく指数に応じて大きくなる。
7k ≡ 1 を満たす最小の k を意味する 7 の位数は 12 を割り切らなければならないため、1、2、3、4、6、12 のいずれかとなる。5 つの真の約数を検証するとそれらすべてが除外されるため、位数は正確に 12 である。
解答
3 回の自乗と最後の乗法により、エラーなしで a = 7 に対するツールの行が再現される。すなわち、k = 2 で 10、k = 4 で 9、k = 8 で 3、そしてフェルマーが予言した通り k = 12 で 1 となる。位数は 12 でありその真の約数ではないため(位数の検証では k = 6 で 12 が必要であり、これは 1 ではない)、その行は 1 から 12 までの順列となり、すべての非ゼロ剰余に正確に 1 回ずつ到達する。これにより 7 は mod 13 における原始根となる。ここで、行を逆方向に読んでみる。11 が与えられたとき、k を求めよ。これに対する繰り返し二乗法(square-and-multiply)は存在せず、探索を行うしかない。順方向が容易で逆方向が困難というこの非対称性こそが、ディフィー・ヘルマン鍵共有の基盤全体である。このアルゴリズムは表には不可能なスケールで拡張される。2048 ビットの指数に必要な剰余乗法は高々約 4 000 回であるが、それが示す累乗を書き下すにはおよそ 2.7 × 10616 桁が必要となる。
学習の道すじ