原始根で指数・対数
ax≡b(mod37)を解く
1.小さい原始根
このワークシートはMath by Codeの一部です。
原始根はべき計算の生成元でした。
だから、法pの剰余計算が、原始根を使えばべき乗によって、
すべての剰余を表現できるので、べき乗の合同方程式を解きたいときにとても役に立つ。
そうはいっても、べき乗の底は小さい方がいいね。
だから、複数ある原始根のうち、できるだけ小さい数を選ぼう。
<原始根は小さくしよう>
指数計算の桁爆発を避けたいので、できるだけ小さな原始根を選ぼう。
原始根、つまり、底
法、底
3、2
5、2
7、3
11、2
13、2
17、3
19、2
23、5
29、2
31、3
37、2
41、6
43、3
47、5
53、2
59、2
61、2
67、2
71、7
73、5
79、3
83、2
89、3
91、5
97、2
2.原始根で指数と対数
原始根aの意味は、powermod(a,x,p)の値が、xをすべての剰余を入れると、それがバラバラにかぶりなく
返ってくる、つまり、全単射(1対1)の写像を作ってくれるということだった。
だから、逆関数も全単射できれいに返ってくる。
たとえば、底を2、法を13として指数計算してみよう。
ベキ表
21≡2(mod 13),
22≡4(mod 13),
23≡8(mod 13),
24≡3(mod 13),
25≡6(mod 13),
26≡12(mod 13)
27≡11(mod 13),
28≡9(mod 13),
29≡5(mod 13),
210≡10(mod 13),
211≡7(mod 13),
212≡1(mod 13)
213≡2(mod 13),
・これを指数関数として表示することができる。y≡2x(mod13)
つまり、
x={1,2,3,4,5,6,7,8,9,10,11,12}に対して
y={2,4,8,3,6,12,11,9,5,10,7,1,2}
これがベキ表だ。(mod13)
もちろん、単調増加関数ではないが、全単射の写像になってはいる。
geogebraでは、p=13
x=sequence(p-1)
原始根をa=2 , 初期値をb=aとして、a b (mod p)を次のbとする。
つまり、
yn=a yn-1(mod p) , y1=a という漸化式を関数化することでベキ表が作れるはずだね。
y=IterationList( Mod(a b,p),b,{a},b)
これがベキ表
この逆関数である対数関数をx≡I(y)とかくことにしよう。
y={2,4,8,3,6,12,11,9,5,10,7,1,2}に対して
x={1,2,3,4,5,6,7,8,9,10,11,12}となる。
これが指数取り出し表だ。
2a≡A(mod 13) ならa=I(A)
2b≡B(mod 13) ならb=I(B)
・2I(AB)≡AB≡2a2b≡2 a+b≡2 I(A)+I(B)(mod 13)
2I(AB)-I(A)-I(B)≡1(mod13)
フェルマーの小定理から212≡1(mod13)
この2式の指数を比較して、I(AB)-I(A)-I(B)は12の倍数。
つまり、I(AB)≡I(A)+I(B)(mod12)
・また、B=Aにして、複数かけ算すると、
l(AA)≡l(A)+l(A)=2l(A)(mod12)
l(AAA)≡3l(A)(mod12)
つまり、I(Ak)≡k I(A)(mod12)
(対数法則の一般化)
mod pの原始根をgとするとき
ga≡A(mod p) ならa=I(A)で指数を取り出す対数関数
gb≡B(mod p) ならb=I(B)で指数を取り出す対数関数
I(AB)≡I(A)+I(B) (mod p-1)
I(Ak)≡k I(A) (mod p-1)
法も変えて合同方程式を解こう。
3.対数で指数を取り出す
<対数関数の使い方>
原始根を2とし、mod13とする。
指数取り出し表はmod13ではなく(mod 12)になる。
y={2,4,8,3,6,12,11,9,5,10,7,1,2}に対して
x={1,2,3,4,5,6,7,8,9,10,11,12}
これを意味が伝わりやすくなるy=a, x=I(a)とかき、aの降順に並べかえ、I(a)も対応させよう。
a= { 1, 2, 3, 4, 5, 6, 7, 8, 9 ,10,11,12}に対して
I(a)={12,1, 4, 2, 9, 5,11, 3, 8, 10, 7, 6}
geogebraでは、原始根a=2, p=13とするとき
x=sequence(p-1)
y=IterationList(Mod(a b,p),b,{a},b)
これがベキ表だから。
id=zip((yy,aa), yy ,y ,aa, x) と(y,x)の順のタプルのリストを作ることで逆関数にする。
idT=sort(id)でyの昇順にすると、yを1からp-1まで並べたときのxを取り出す
指数取り出し表になる。
a=10=2×5に対して、I(10)はI(2)+I(5)=1+9=10と計算できる。
a=8=23に対して、I(8)はI(2)×3=1×3=3と計算できる。
通常の指数・対数関数のように単調増加ではないにしても、
1対1対応だから、A≡B(mod p)からI(A)≡I(B)(mod p-1)という指数の関係に置き換えることができる。
指数にしてしまうことで、A,Bを素因数分解して,
(mod p)の積とベキの計算を(mod p-1)の和と積に還元できる。
もちろん、最終的には指数ではなく、(mod p)のべき表を使った計算に戻そう。
(例)「x≡1156(mod 13)の解」は?
両辺の対数をとり、指数を取り出そう。
I(x)≡I(1156)(mod12)
I(x)≡56I(11)=(12×4+8) I(11)≡8 I(11)(mod12)
指数取り出し表で指数にする。aからI(a)を読む。l(11)=7.
I(x)≡8 ・7=56≡8(mod 12)
べき表でI(a)からaを読む。l(a)=8となるa=9だから、x≡9(mod 13)。
つまり、powermod(11,56,13)=9が表の読み取りで求められた。
(例)「x≡81233(mod 13)の解」は?
原始根が2で、8=23
両辺の対数をとり、指数を取り出そう。
I(x)≡I(23・1233)(mod12)
I(x)≡3699 I(2)=(12×308+3) I(2)≡3 I(2)(mod12)
指数取り出し表で指数にする。aからI(a)を読む。I(2)=1.
I(x)≡3・1≡3(mod 12)
べき表でI(a)からaを読む。l(a)=3となるa=8.
x≡8(mod 13)。
つまりpowermod(8, 1233,13)=8が表の読み取りで求められた。
(例)「1次合同式11x≡9(mod 13)の解」は?
原始根が2
両辺の対数をとり、指数を取り出そう。
I(11x)≡I(9)(mod12)
I(11)+l(x)≡I(9)(mod12)
指数取り出し表で指数にする。aからI(a)を読む。I(9)=8
7+l(x)≡8(mod 12)
l(x)≡8-7=1(mod 12)
べき表でI(a)からaを読む。l(a)=1 となるa=2. x≡2(mod 13)。
(例)「1次合同式 19x≡23(mod 37)の解」は?
mod37のべき表から
mod36の指数取り出し表を作ることから始めよう。
a =
{ 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36}
I(a)=
{36,1,26,2,23,27,32,3,16,24,30,28,11,33,13, 4, 7,17, 35,25,22,31,15,29,10,12, 6,34,21,14, 9, 5,20, 8,19,18}
両辺の対数をとり、指数を取り出そう。
I(19x)≡I(23)(mod 36)
対数法則
I(19)+I(x)≡I(23)(mod36)
指数取り出し表で指数にする。aからI(a)を読む。l(23)=15.
35+I(x)≡15(mod36)
移項する
I(x)≡15-35≡-20+36≡16(mod36)。
べき表として使う。I(a)からaを読む。I(a)=16から逆にたどると、a=9。
x≡9(mod 37)。
(例)「合同式 7x20≡34(mod 37)の解」は?
両辺の対数をとり、指数を取り出そう。
I(7)+20 l(x)≡I(34)(mod 36)
指数取り出し表で指数にする。aからI(a)を読む。l(34)=8
32+20 I(x)≡8(mod36)
移項する
20 I(x)≡8-32≡-24+36≡12(mod36)。
係数と法がすべて4の倍数なので、4で合同式を簡約する。
5 I(x)≡3(mod 9)
(1+9)/5=2から、5×2≡10≡1(mod 9)となり、 5の逆元は2。
I(x)≡5-13≡2・3≡6(mod 9)⇒6, 15, 24, 33(mod 36)。
I(x)≡6, 15, 24, 33(mod 36)。
べき表として使う。I(a)からaを読む。
x≡27,23,10,14(mod 37)。