【初级算法】exgcd

扩展欧几里德算法是用来在已知a, b求解一组{x,y}
使它们满足贝祖等式: ax+by = gcd(a, b) =d(解一定存在,根据数论中的相关定理)。扩展欧几里德常用在求解模线性方程及方程组中。


emm.这东西唯一给我的感觉,,好难啊。,,我只学过一点点高中数学、
然后死命的脑补了一下。思考了一段时间。
emmm。终于弄懂了一点
上代码

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

且当ax+by = gcd(a, b)
当b=0时
gcd(a,0)=a
原式=> ax=a
解得x=1
y值不固定(因为我们只要一组存在的解,所以就当y=0)

然后随便转移一下,递归一下,就好了。

你可能感兴趣的:(算法知识点)