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