AcWing 878. 线性同余方程(模板)

题目链接:点击这里

在这里插入图片描述

#include<iostream>
#include<cstdio>

using namespace std;
typedef long long ll;

// 求x, y,使得ax + by = gcd(a, b)
int exgcd(int a, int b, int &x, int &y)
{
    if(!b)
    {
        x = 1, y = 0;
        return a;
    }
    
    int d = exgcd(b, a % b, y, x);
    y -= (a / b) * x;
    
    return d;
}

int main()
{
    int n;
    scanf("%d", &n);
    while(n--)
    {
        int a, b, m;
        scanf("%d%d%d", &a, &b, &m);
        
        int x, y;
        int d = exgcd(a, m, x, y);
        
        if(b % d)   puts("impossible");
        else    printf("%d\n", (ll)x * (b / d) % m);  //扩大b/d倍
    }
    
    return 0;
}
发布了811 篇原创文章 · 获赞 127 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/qq_42815188/article/details/104775310