扩展欧几里得算法与线性同余方程

Posted on 2023-02-24 19:59  lyc2002  阅读(12)  评论(0编辑  收藏  举报

扩展欧几里得算法

代码

typedef long long LL;

LL exgcd(int a, int b, int &x, int &y)
{
    if (b == 0) {
        x = 1, y = 0;
        return a;
    }
    LL d = exgcd(b, a % b, y, x);
    y -= a / b * x;
    return d;
}

线性同余方程

代码

// 求 ax≡b (mod m),最小非负整数 x
typedef long long LL;

LL x, y;
LL d = exgcd(a, m, x, y);
if (b % d == 0) {
    x *= (b / d);
    LL t = m / d;
    printf("%d\n", (x % t + t) % t);
} else {
    puts("impossible");
}