拓展欧几里得定理学习笔记

(ax_1+by_1=gcd(a,b))

(bx_2+(amod b)y_2=gcd(b,a mod b))

( herefore gcd(a,b)=gcd(b,a mod b))

(ecause ax_1+by_1=bx_2+(amod b)y_2)

( herefore a mod b=a-lfloorfrac{a}{b} floor imes b)

(ecause ax_1+by_1=bx_2+(a-lfloorfrac{a}{b} floor imes b)y_2)

我们利用乘法分配律,把这个式子展开

(bx_2+(a-lfloorfrac{a}{b} floor imes b)y_2=bx_2+ay_2-lfloorfrac{a}{b} floor imes by_2)

然后,我们把 (b) 提出来

(bx_2+ay_2-lfloorfrac{a}{b} floor imes by_2=ay_2-b(x_2-lfloorfrac{a}{b} floor imes y_2))

然后,我们发现 (x_1=y_2,y_1=x_2-lfloorfrac{a}{b} floor imes y_2)

这样,代码就好写了。

int exgcd(int a,int b,int &x,int &y){
    if(!b){
        x=1;
        y=0;
        return a;
    }
    int d=exgcd(b,a%b,x,y);
    int t=x;
    x=y;
    y=t-a/b*y;
    return d;
}
原文地址:https://www.cnblogs.com/zhaohaikun/p/12483577.html