gcd 与 egcd

2019-03-23  本文已影响0人  桐人_

gcd(a,b)是求解a,b的最大公因数,都比较熟悉了,直接上代码:

int gcd(int a, int b){
    if(b == 0)
      return a;
    else 
      gcd(b, a%b);
}

ax + by = gcd(a,b)
egcd算法是根据a,b同时求出x,y,gcd(a,b)
ax + by = gcd(a,b)
bx' + (a%b)y' = gcd(a,b)
a%b = a - (a/b)b
代入得:ay' + (x' - (a/b)
y') = gcd(a,b)
而当b = 0时:a1 + b0 = a = gcd(a,b)
先上代码看一下:

int egcd(int a, int b, int &x, int& y){
    int d = a;
    if(d != 0){
      d = egcd(b,a%b,y,x);      //不太明白这里的x',y'为什么等于上一步中的y,x
      y = (y - (a/b)*y);
    }else{
      x = 1;
      y = 0;
    }
    return 0;
} 
上一篇下一篇

猜你喜欢

热点阅读