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

    问题:

       

    其中任意mi之间互质

    求最小的x使其满足上式子

    令$ N=prod {mi} $

    令N=m1*m2....*mn;

    可以证明,在N以内有一解满足上式

    对于每一个式子,不妨设x=(N/mi)*y;(注意到此处y可能为小数,但在%n意义下其有对应整数)

    问题此时等价为(N/mi)*y同余1(mod mi),即扩展欧几里得算法

    最终所求x即(N/mi)*y*a[i]

    而综合所有式子x总=x1+x2+...+xn;

    原理:对于每一个mi,xj(j!=i) mod mi=0,所以对其不造成影响

    代码

    int gcd(int a,int b,int &x,int &y)
    {
      if (b==0)
        { 
            x=1; y=0; return(a);
        }
      int tmp=gcd(b,a%b,y,x);
      y-=(a/b)*x;
      return(tmp);
    }
    int china(int n)
    {
        int M=1,ans=0,x,y,d;
        for (int i=0; i<n; i++)
        { 
          M*=m[i];
      }
      for (int i=0; i<n; i++)
      {
          int mi=M/m[i],x,y;
          gcd(mi,m[i],x,y);
          ans=(ans+a[i]*mi*x)%M;
        }
        return((ans+M)%M);
    }
  • 相关阅读:
    第九次作业
    第八次作业
    第七次作业
    第六次作业
    第五次作业
    第四次作业
    第三次作业
    第二次作业
    第一次作业
    《Java技术》第三次作业--面向对象——继承、抽象类、接口
  • 原文地址:https://www.cnblogs.com/yinwuxiao/p/8001558.html
Copyright © 2011-2022 走看看