编程语言
首页 > 编程语言> > 【模板】扩展欧几里得算法

【模板】扩展欧几里得算法

作者:互联网

【模板】扩展欧几里得算法

void exgcd(int a, int b, int &g, int &x, int &y) {
    if (!b) x = 1, y = 0, g = a;
    else {
        exgcd(b, a % b, g, x, y);
        int t = x;
        x = y;
        y = t - a / b * y;
    }
}

如何理解

虽然不知道在推什么但是确实推出来了(?

\[\begin{aligned} \because ax+by&=\gcd(a,b)\\ \gcd(a,b)&=\gcd(b,a \bmod b)\\ \therefore ax+by&=bx+(a \bmod b)y\\ &=bx+(a-\left\lfloor\dfrac{a}{b}\right\rfloor b)y\\ \therefore ax+by&=ay+b(x-\left\lfloor\dfrac{a}{b}\right\rfloor y) \end{aligned} \]

代码的第4~7行就是从从最后得到的 \(ax+by=ay+b(x-\left\lfloor\dfrac{a}{b}\right\rfloor y)\) 得到的。

标签:lfloor,right,int,dfrac,欧几里得,rfloor,算法,ax,模板
来源: https://www.cnblogs.com/burnling/p/16518506.html