zoukankan      html  css  js  c++  java
  • 878. 线性同余方程

    (a*x equiv b (mod m))

    即存在(y)

    使得(a*x = m * y + b)

    (a*x -m*y=b)

    (y'= -y)

    (a*x + m*y'=b)

    (a*x equiv b (mod m))有解等价于(a*x + m*y'=b)有解

    联想扩展欧几里得算法,若方程(a*x + m*y'=b)有解,那么b一定是((a, m))的倍数,若不是,方程一定无解。

    可以先用扩展欧几里得求出使得(a*p + m*q= (a, m))的系数(p, q),那么求出(x, y')只需要将(p, q)扩大(b/(a, m))即可。

    给定n组数据ai,bi,mi,对于每组数求出一个xi,使其满足ai∗xi≡bi(mod mi),如果无解则输出impossible。

    #include<iostream>
    using namespace std;
    
    #define LL long long
    
    int exgcd(int a, int b, int &x, int &y){
        if(b == 0){
            x = 1, y = 0;
            return a;
        }
        int d = exgcd(b, a % b, y, x);
        y -= a / b * x;
    
        return d;
    }
    
    int main(){
        int T;
    
        cin >> T;
        while(T --){
            int a, b, m;
            cin >> a >> b >> m;
            int x, y;
            int d = exgcd(a, m, x, y); 
            
            if(b % d) puts("impossible");
            else printf("%ld
    ", (LL) x * (b / d) % m);
        }
    
        return 0;
    }
    
  • 相关阅读:
    创意:网络族谱
    排列组合的要点
    创意:人生记录
    纽康悖论谜题
    发财的要点
    c#4.0协变逆变的理解
    关于开发自我训练课程
    反对继承
    远离疲倦,告别非理性思维
    中国软件正版化的理想模型
  • 原文地址:https://www.cnblogs.com/tomori/p/13707729.html
Copyright © 2011-2022 走看看