扩展欧几里得算法

  给你\(a,b\),求\(x,y\)使得\(xa+yb=gcd(a,b)\)

  假设已经求出了\(x,y\)满足\(xb+y(a\mod b)=gcd(a,b)\)

\[\begin{align} xb+y(a\mod b)&=gcd(a,b)\\ xb+y(a-\lfloor\frac{a}{b}\rfloor b)&=\gcd(a,b)\\ xb+ya-y\lfloor\frac{a}{b}\rfloor b&=\gcd(a,b)\\ ya+(x-y\lfloor\frac{a}{b}\rfloor )b&=\gcd(a,b) \end{align} \]

  时间复杂度:\(O(\log n)\)

代码

ll exgcd(ll a,ll b,ll &x,ll &y)
{
	if(!b)
	{
		x=1;
		y=0;
		return a;
	}
	ll ab=a/b;
	ll c=a-b*ab;
	ll d=exgcd(b,c,y,x);
	y-=x*ab;
	return d;
}
posted @ 2018-03-05 20:59  ywwyww  阅读(146)  评论(0编辑  收藏  举报