扩展欧几里得

北战南征 提交于 2019-12-06 13:53:59

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

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

\(\because gcd(a,b)=gcd(b,a\mod b)\)

\(\therefore ax_1+by_1=bx_2+(a\mod b)y_2\)

\(\because a\mod b=a-\lfloor \frac{a}{b}\rfloor b\)

\(\therefore ax_1+by_1=bx_2+ay_2-\lfloor \frac{a}{b}\rfloor by_2=ay_2+b(x_2-\lfloor\frac{a}{b}\rfloor y_2)\)

\(\therefore x_1=y_2,y_1=x_2-\lfloor\frac{a}{b}\rfloor y_2,x1,y1为当前层,x2,y2为递归的下一层的值\)

\(\because 最后一层,a=g,b=0,ax+by=g\)

\(\therefore 设x=1,y=0\)

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;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!