中国剩余定理
形式
解同余方程组
⎩⎪⎨⎪⎧x≡b1moda1x≡b2moda2x≡b3moda3
示例
孙子问题
最早,在《孙子算经》中有这样一个问题:“今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?用白话描述就是,现在有一个数不知道是多少,只知道这个数除以3余2,除以5余3,除以7余2, 问这个数是多少?
转换为方程:
⎩⎪⎨⎪⎧x≡2mod3x≡3mod5x≡2mod7
要直接找到满足条件的x并不容易,但可以找n1,n2,n3,使
⎩⎪⎨⎪⎧n1≡2mod3n2≡3mod5n3≡2mod7
令x=n1+n2+n3
x≡2(mod3)=(n1+n2+n3)≡2(mod3)
∵n1≡2(mod3)
要使上式成立,则n2,n3要是3的倍数
同理,
(n1+n2+n3)≡3(mod5)(n1+n2+n3)≡2(mod7)
上式成立的条件分别是n1,n3是5的倍数。n1,n2是7的倍数
综上,
n1既是5的倍数,又是7的倍数,所以n1是35的倍数
n2既是3的倍数,又是7的倍数,所以n2是21的倍数
n1既是3的倍数,又是5的倍数,所以n3是15的倍数
同余方程组转换为:
⎩⎪⎨⎪⎧35m1≡2(mod3)21m2≡3(mod5)15m3≡2(mod7)
由拓展欧几里得定理:
⎩⎪⎨⎪⎧35w1≡1(mod3)21w2≡1(mod5)15w3≡1(mod7)
相当于求逆元
⎩⎪⎨⎪⎧w1=inverse(35,3)w2=inverse(21,5)w3=inverse(15,7)
由比例关系
{35m1≡2(mod3)35w1≡1(mod3)
→m1=2w1
同理:
⎩⎪⎨⎪⎧m1=2w1m2=3w2m3=2w3
汇总:
⎩⎪⎨⎪⎧n1=35m1=35∗2w1=35∗2∗inverse(35,3)n2=21m2=21∗3w2=21∗3∗inverse(21,5)n3=15m3=15∗2w3=15∗2∗inverse(15,7)
求出x=n1+n2+n3
姿势
将这个过程一般化
设n=i=1∏nai→所有模数的乘积
$r_i = \frac{n}{a_i} $ (35, 21, 15)
wi=inverse(ri,ai)
mi=bi∗wi
ni=ri∗mi
所有ni相加得x
eg:
1 2 3 4 5 6 7
| t1 = inverse(q, p) t2 = inverse(p, q)
m1 = (q*t1*c1 + p*t2*c2) % n m2 = (q*t1*c1 + p*t2*cp2) % n m3 = (q*t1*cp1 + p*t2*c2) % n m4 = (q*t1*cp1 + p*t2*cp2) % n
|
珍贵手稿

