【数论】exgcd 扩展欧几里得算法

参考:exgcd详解 - zzt1208 - 博客园 (cnblogs.com)

exgcd(扩展欧几里得算法),用来求形如 a x + b y = g c d ( a , b ) ax+by=gcd(a,b) ax+by=gcd(a,b) a , b a,b a,b 为常数)的方程的一组整数解。(如果不确定等号右边是不是gcd,可以先当做gcd,求出来之后验证,是的话就是解,不是的话就不是解)

推导见上面的链接,这篇只放个板子

code

int exgcd(int a, int b, int &x, int &y) // 扩展欧几里得
{
    if (b == 0)
    {
        x = 1;
        y = 0;
        return a;
    }
    int r = exgcd(b, a % b, x, y);
    int temp = y;
    y = x - (a / b) * y;
    x = temp;
    return r; // 得到a b的最大公因数
}

你可能感兴趣的:(数论,算法)