扩展欧几里得算法

Concrete破百页纪念. 没啥好说的, 无情上公式.
\(gcd(0,n)=n\)
\(gcd(m,n)=gcd(n\ mod\ m, m)\)
\(ax+by=gcd(a,b)\)
\(If\ a=0, we\ have\ x=0,y=1\)
\(otherwise, let\ r=b\ mod\ a\)
\(i.e.\ \ \ \ r=b-a\lfloor b/a\rfloor\)
\(Then, rx+ay=gcd(r,a)=gcd(a,b)\)
\(a(y-\lfloor b/a\rfloor x)+bx=gcd(a,b)\)
\(\begin{cases}x:=y-\lfloor b/a\rfloor x,\\ y:=x\end{cases}\)

code:

//mx+ny=gcd(m,n)
inline int extend_Euclid(const int& m, const int& n, int& x, int& y) {
	int gcd, t;
	if (m == 0) { x = 0, y = 1;  return n; }
	gcd=extend_Euclid(n % m, m,x,y);
	t = y;
	y = x, x = t - n / m * y;
	return gcd;
}
posted @ 2021-01-30 21:00  _dwt  阅读(25)  评论(0)    收藏  举报