Transcript ppt - TNT
1.3.3 The Chinese Remainder Theorem 1 • 今回の内容 – 合同式の性質 – Chinese Remainder Theorem(CRT) – CRTに付随する命題 – CRTを用いた計算のアルゴリズム • 本題に入る前に合同式の性質について 触れておく. 2 • 合同式についての性質をいくつか挙げておく. a, b, c, d , m , n (1) a a mod m (2) b a (mod m ) a b (mod m ) (3) a b (mod m ), b c (mod m ) a c (mod m ) (4) a b (mod m ), c d (mod m ) a c b d (mod m ), ac bd (mod m ) (5) a b (mod m ) all for divisor d m, a b (mod d ) (6) a b (mod m ), a b (mod n ), gcd( m , n ) 1 a b (mod mn ) 3 Theorem1.3.9 (Chinese Remainder Theorem). m1 , , m k , x1 , , x k assume : every pair ( i , j ), x i x j (mod gcd( m i , m j )) x Ζ s.t. x x i (mod m i ) (x は lcm ( m 1 , , m k ) を法として合同 for 1 i k ) 4 proof claim1 gcd( m , n ) d , lcm ( m , n ) l とすると x a (mod m ), x b (mod n ) が解を持つための必要 , (1) 十分条件は , a b (mod d ) である , 解は , l を法としてただ一つで ある . proof of claim1 ( ) (1)が解 x を持つとき , d gcd( m , n ) より , x a (mod d ), x b (mod d ). よって a b (mod d ) となる . 5 proof つづき proof of claim1 ( ) a b (mod d ) が成り立っているとき (1)が解を持つことを示す xは t Z によって x a mt (2) , . , と書ける この x が二番目の合同式の解 . になるのは , a mt b (mod n ) すなわち , mt b a (mod n ) ( 3 ) の時である . 6 proof つづき proof of claim1 a b (mod d )より , m t ba d n (mod d と , 表せる . ) d よって ( 3 )の解 t は , t 0 , s Z によって t t0 n s と表すことができる , . d これを ( 2 )に代入すると x a mt 0 ls , ( dl mn ) この x は (1)の解である . また , x と l を法として合同な整数 全て (1)の解である は, . 従って , x a mt 0 (mod l ) を満たす整数 x は全て (1)の解である . ■ 7 proof claim1 より、 2 つの合同式 x a 1 (mod m 1 ), x a 2 (mod m 2 ) x b (mod lcm ( m 1 , m 2 )) の形で表すことが出来 これと る. x a 3 (mod m 3 )が , lcm ( m 1 , m 2 , m 3 )を法として ただ一つの解を持つこ 仮定より の解を , , とを示す . , b a 1 (mod m 1 ) 故に , b a 3 a 1 a 3 (mod m 1 ) 従って , b a 3 a 1 a 3 0 (mod gcd( m 1 , m 3 )) 即ち , ( b a 3 ) gcd( m 1 , m 3 ) (同様にして , gcd( m 2 , m 3 )) 従って , lcm (gcd( m 1 , m 3 ), gcd( m 2 , m 3 )) で割り切れる . 8 proof claim2 a, b, c Z gcd( lcm ( a , b ), c ) lcm (gcd( a , c ), gcd( b , c )) proof 略. ■ 上記の claim2 より , gcd( lcm ( m 1 , m 2 ), m 3 ) lcm (gcd( m 1 , m 3 ), gcd( m 2 , m 3 )) 即ち , b a 3 gcd( lcm ( m 1 , m 2 ), m 3 ) である . 従って , claim1 より , lcm ( m 1 , m 2 , m 3 )を法として 唯一つの解を持つ , . 後は , r についての帰納法で示 す事が出来る . ■ 9 Corollary 1.3.10. m1 , , m k Z i j) ( for xi Z , x Z ( for s.t. gcd( m i , m j ) 1 x x i (mod m i ) s.t. 1 i k) k (x は m i を法として合同 ) i 1 10 proof k M m i , M i M / m i とおく . a i M i bm i 1 ( b Z ) i 1 (gcd( M i , m i ) 1 となる このとき , .) a i s.t. a i M i 1(mod m i ) (by extended gcd) k さらに aM , x i i xi (1) と定めると , これが解になる . i 1 実際に , (1)の右辺第一項に注目す a 1 M 1 x1 x1 (mod m 1 ) 第二項以下は x x1 (mod m 1 ) ると , x x 2 (mod m 2 ) であり , , M 2 , M 3, M k が m 1 で割り切れるから a 2 M 2 x 2 a k M k x k 0 (mod m 1 ) となる 以下 , m 2 , , m k について同様に考えれ , x x k (mod m k ) . ばよい . となる . 一意性は x , x ' を解とすると であるから よって , x x ' (mod m i ) ( i 1, , k ) , ( x x') mi ( i 1, , k ) , M についても同様 . ( 合同式の性質 ( 6 ))■ 11 Algorithm 1.3.11(Chinese).その1 負担にならなければ Input: m i , x i Z (1 i k ) を昇順に並べ替える Output: x Z ( x x i (mod m i ) for all x i ) Step1: j 2, C1 1 Step2: p m 1 m j 1 (mod m j ) compute , m i , ( xi ) . ( u , v , d ) s.t. up vm j d gcd( p , m j ) ( by extgcd) if d 1 then output an error mesage (the m i are not pairwise coprime) else C j u, j j 1 m1 m k if j k then step 1 , 2を事前に計算するほう go to step2 を固定する場合は , がよい . 12 Algorithm 1.3.11(Chinese). その2 y 2 ( x 2 y 1 ) C 2 (mod m 2 ) Step3: y 1 x1 (mod m 1 ) for j 2, , k y 3 ( x 3 ( y 1 m 1 y 2 )) C 3 (mod m 3 ) y 4 ( x 4 ( y 1 m 1 ( y 2 m 3 y 3 ))) C 4 (mod m 4 ) y j ( x j ( y 1 m 1 ( y 2 m 2 ( y 3 m j 2 y j 1 ) )) C j (mod m j ) Step4: x y1 m 1 ( y 2 m 2 ( y 3 m k 1 y k ) )) return x 13 Algorithm1.3.12(Inductive Chinese). Input: m i , x i Z (1 i k ) Output: x Z ( x x i (mod m i ) for all x i ) Step1: Step2: i 1, m m 1 , x x1 Step3: if i k then return x else i i 1 compute u , v s .t . um vm i 1( by extgcd) x umx i vm i x m mm i x x (mod m ) go to step 2 14 Pythonでの実装(Algorithm1,3,12) import nzmath.gcd x1 , x k , m 1 , m k をリスト型で入力 def crt(xl,ml): #step1 k = len(xl) m = ml[0] x = xl[0] NZMATH の module を利用 #step2,step3 for i in range(1,k): u,v,d = gcd.extgcd(m,ml[i]) If d > 1: raise Error x = u*m*xl[i] + v*l[i]*x m = m*ml[i] x = x%m return x 15 example x1 5 , x 2 3, x 3 13 , m1= 7 , m 2 11 , m 3 2 の場合 i 1 i2 u , v 3, 2 u , v 1, 38 ( s .t . u * 7 v * 11 1) ( s .t . u * 77 v * 2 1) x 3 * 7 * 3 2 * 11 * 5 47 x 1 * 77 * 13 ( 38 ) * 2 * 47 2571 m 7 * 11 77 m 77 * 2 154 x 47 (mod 77 ) x 47 (mod 154 ) 47 (mod 154 ) 16 課題 • Algorithm1.3.11の実装 • Exercise8,9の取り組み 17