(a,b)表示a,b的最大公因数
设 a = b*k + r , 则 r = a mod b.
证明 (a,b) = (b,r)
(1).
设 a = s*u, b = t*u.(表示对于a,b的任意一个公因子u,都有唯一的s,t与之对应。)
将 a = s*u, b = t*u 代入 a = b*k + r;
得 s*u = t*u*k + r;
移项得,r = s*u - t*u*k = u * (s - t*k);
可知,对于a,b的任意一个公因子u,都是 r 的因子;
(2).
设 b = s*v, r = t*v.(表示对于b,r的任意一个公因子v,都有唯一的s,t与之对应。)
将 b = s*v, r = t*v 代入 a = b*k + r;
得 a = s*v*k + t*v = v*(s*k + t);
可知,对于a,b的任意一个公因子v,都是 a 的因子;
由(1)知,(a,b)是r的因子
由(2)知,(b,r)是a的因子
所以 (a,b) = (b,r)
由(带余除法)
a = bq1 + r1
b = r1q2 + r2
r1 = r2q3 + r3
... = ... + ...
rn-2 = rn-1qn + rn
rn-1 = rnqn+1 + 0
因为 (a,b) = (b,r1) = (r1,r2) = (r2,r3) =...= (rn-1,rn)=(rn,0)=rn.
ll _gcd(ll a,ll b) { if(b == 0) return a; else return _gcd(b,a%b); }