拓展欧几里得(求解 ax+by=c 求x,y)

int extend_Euclid(int a, int b, int &x, int &y)
{
    if(b==0)
    {
        x = 1;
        y = 0;
        return a;
    }
    int r = extend_Euclid(b, a%b, y, x);
    y -= a/b*x; //这里已经是递归,回溯的过程了,x,y已经颠倒了
    return r;
}

以上是求 a*x +b*y == gcd(a,b)某一组特解X1,Y1的过程

所以a*x + b*y == gcd(a,b)的通解为 X = X1 - b/gcd(a,b)*t

                                                              Y = Y1 + a/gcd(a,b)*t        t为任意整数。

你可能感兴趣的:(模板,数论)