zoukankan      html  css  js  c++  java
  • 模运算的世界--线性同余方程组

    线性同余方程组

    对于线性同余方程组:

    a1*xb1 (mod c1)

    a2*xb2 (mod c2)

    ……

    an*xbn (mod cn)

    (1)若有c1c2c3、……cn两两互质,则可以用中国剩余定理直接算出可行解(唯一解?)

    (2)若不满足模数两两互质,则:

      设最后的解为X

      我们利用扩展欧几里得可以算出一个可行解x1满足:

    a1*x1b1 (mod c1)

        那么对于第二个方程 a2*xb2 (mod c2)X一定满足X mod lcm(c1,x2)=x1

        所以前两个方程可直接合并成 x mod lcm(c1,c2)=x1;

        这样依次合并下去……

    int gcd(int a,int b)
    {
        if(a%b==0)return b;
        else return gcd(b,a%b);
    }
    int mod_inverse(int a,int m)
    {
    	int x,y,d;
    	ext_gcd(a,m,d,x,y);
    	return (m+x%m)%m;
    }
    //返回一个(b,m)数对
    pair<int,int>linear_congruence(const vector<int>&A,const vector<int>&B,const vector<int>&M)
    {
        int x=0,m=1;
        for(int i=0;i<A.size();i++)
        {
            int a=A[i]*m,b=B[i]-A[i]*x,d=gcd(M[i],a);
            if(b%d!=0)return make_pair(0,-1);//无解
            int t=b/d*mod_inverse(a/d,M[i]/d)%(M[i]/d);
            x=x+m*t;
            m*=M[i]/d;
        }
        return make_pair(x%m,m);
    }
    



  • 相关阅读:
    hdu 1106 排序(排序)
    hdu 1040 As Easy As A+B(排序)
    hdu 1029 Ignatius and the Princess IV(排序)
    mysql-9索引
    mysql-8 alter命令
    mysql-7事务管理
    mysql-6正则表达式
    http协议
    9-2交互体验
    9-2专项测试下午
  • 原文地址:https://www.cnblogs.com/bryce1010/p/9387286.html
Copyright © 2011-2022 走看看