ACWING878. 线性同余方程

ACWING878. 线性同余方程

原题链接

描述

\(n\) 组数据,求解 \(a_i*x\equiv b_i\pmod{m_i}\)

思路

拓展欧几里得算法。。。

代码

#include<bits/stdc++.h>
using namespace std;
int n; 
int extgcd(int a,int b,int &x,int &y){
    if(b==0){
        x=1; y=0;
        return a;
    }
    int d=extgcd(b,a%b,y,x);
    y-=a/b*x;
    return d;
}
int main(){
    cin>>n;
    while(n--){
        int a,b,m,x,y;
        scanf("%d%d%d",&a,&b,&m);
        int d=extgcd(a,m,x,y);
        int t=m/d;
        if(b%d) {puts("impossible"); continue;}
        long long xx=x;
        xx*=b/d;
        x=(xx%t+t)%t;
        printf("%d\n",x);
    }
    return 0;
}
posted @ 2021-01-24 21:06  ans20xx  阅读(44)  评论(0编辑  收藏  举报