拓展欧几里得定理

void gcd(int a, int b, int &d, int &x, int &y) {
    if(!b) d = a, x = 1, y = 0;
    else gcd(b, a%b, d, y, x), y -= x * (a / b);
}

 

假设 ax1+by1=gcd(a,b) (方程一) bx2+(a%b)y2=gcd(b,a%b)(方程二)
由欧几里得算法gcd(a,b)=gcd(b,a%b) 得到 ax1+by1=bx2+(a%b)y2
即ax1+by1=bx2+(a-a/b*b)y2 => ax1+by1=ay2+b(x2-a/b*y2) 最后可以得到 x1=y2; y1=x2-a/b*y2

posted @ 2019-06-10 11:40  Hanasaki  阅读(178)  评论(0)    收藏  举报