中国剩余定理
孙子定理
, Chinese remainder theorem(CRT)
参考 : 百度百科-中国剩余定理
有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?
x=2mod3
x=3mod5
x=2mod7
// 求解得: x = 23
模算术和数论有相关算法可以解决这个问题,参考资料:《密码学原理与实践第三版》5.2章节 更多数论知识
1. Euclidean欧几里得算法
Euclidean
算法的基本形式,可以给出两个正整数a、b的最大公因子Greatest Common Divisor(GCD)
。
举例计算 : g c d ( 99 , 63 ) gcd(99,63) gcd(99,63)
99 = 1 ⋅ 63 + 36 99 = 1 · 63 + 36 99=1⋅63+36
63 = 1 ⋅ 36 + 27 63 = 1 · 36 + 27 63=1⋅36+27
36 = 1 ⋅ 27 + 9 36 = 1 · 27 + 9 36=1⋅27+9
27 = 3 ⋅ 9 + 0 27 = 3 · 9 + 0 27=3⋅9+0
g c d ( 99 , 63 ) = ( 63 , 36 ) = ( 36 , 27 ) = ( 27 , 9 ) = 9 gcd(99, 63) = (63, 36) = (36, 27) = (27, 9) = 9 gcd(99,63)=(63,36)=(36,27)=(27,9)=9
2. 扩展欧几里得算法,求模乘逆: b − 1 ( m o d a ) b^{-1}\pmod a b−1(moda)
-
是否存在整数s,t,使得 s a + t b = ( a , b ) sa+tb=(a,b) sa+tb=(a,b)?
如果存在, 且 ( a , b ) = 1 (a,b)=1 (a,b)=1,则有 s a + t b = 1 sa+tb=1 sa+tb=1
两边模a之后,得到 t b ≡ 1 ( m o d a ) tb\equiv 1\pmod a tb≡1(moda),即
t = b − 1 ( m o d a ) t=b^{-1}\pmod a t=b−1(moda) -
书上例5.1计算 2 8 − 1 ( m o d 75 ) 28^{-1}\pmod{75} 28