「模板」扩展欧几里得算法(exgcd)

扩展欧几里得算法(exgcd)

求解不定方程 \(ax+by=gcd(a,b)\)

\[ax+by=gcd(a,b) \]

\[bx'+(a\%b)y'=gcd(b,a\%b) \]

因为

\[gcd(a,b)=gcd(b,a\%b) \]

其中

\[a\%b=a-b\left\lfloor\dfrac{a}{b}\right\rfloor \]

所以

\[ax+by=bx'+(a\%b)y'=bx'+(a-b \left\lfloor\dfrac{a}{b}\right\rfloor)y' \]

整理可得

\[ax+by=ay'+b(x'-\left\lfloor\dfrac{a}{b}\right\rfloor y') \]

所以

\[x=y',y=x'-\left\lfloor\dfrac{a}{b}\right\rfloor y' \]

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;
}
posted @ 2021-10-04 22:39  Acestar  阅读(64)  评论(0编辑  收藏  举报