Pentium.Labs

System全家桶:https://zhuanlan.zhihu.com/c_1238468913098731520

导航

同余、中国剩余定理

同余: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编辑  收藏  举报



Pentium.Lab Since 1998