zoukankan      html  css  js  c++  java
  • 同余、中国剩余定理

    同余: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

  • 相关阅读:
    P3507 [POI2010]GRA-The Minima Game
    P2038 无线网络发射器选址
    2017.9.23清北第二场
    P3183 [HAOI2016]食物链
    2017.9.17校内noip模拟赛解题报告
    Day2代码
    P1328 生活大爆炸版石头剪刀布
    Fibinary Numbers
    Mac os 进行Android开发笔记(1)
    python中文注释及输出出错
  • 原文地址:https://www.cnblogs.com/pdev/p/4067291.html
Copyright © 2011-2022 走看看