同余、中国剩余定理
同余:a≡b (mod m),表示a % m==b % m
同余式的运算法则:
--------------------------------------------------------------------------------------------------------------
中国剩余定理出自《孙子算经》中的一个问题:
有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?
这道题实际上就是解这么一个同余方程组:
x≡2 (mod 3)
x≡3 (mod 5)
x≡2 (mod 7) 求解x
中国剩余定理:求解同余方程组
n≡a[1] (mod m[1])
n≡a[2] (mod m[2])
......
n≡a[i] (mod m[i])
该方程组有解的条件:m[i]两两互质
至于该方程的解法,wikipedia上解释得很详细:
1 int extend_gcd(int a,int b,int &x,int &y){ 2 if (b==0){ 3 x=1;y=0; 4 return a; 5 } 6 else{ 7 int r=extend_gcd(b,a%b,y,x); 8 y=y-x*(a/b); 9 return r; 10 } 11 } 12 13 int CRT(int a[],int m[],int n) 14 { 15 int M=1; 16 for (int i=1;i<=n;i++) M*=m[i]; 17 int ret=0; 18 for (int i=1;i<=n;i++) 19 { 20 int x,y; 21 int tm=M/m[i]; 22 extend_gcd(tm,m[i],x,y); 23 ret=(ret+tm*x*a[i])%M; 24 } 25 return (ret+M)%M; 26 } 27 28
//Reference:http://blog.csdn.net/cyendra/article/details/38402869
中国剩余定理还有一种迭代解法:
Reference:http://scturtle.is-programmer.com/posts/19363.html
posted on 2014-11-01 16:12 Pentium.Labs 阅读(1102) 评论(0) 编辑 收藏 举报