\[ 設c=gcd(a,b),那麼a可以表示爲mc,b可以表示爲nc的形式。然後令a=kb+r,那麼我們就\\ 只需要證明gcd(b,r)=c即可。{\because}r=a-kb=mc-knc,{\therefore}gcd(b,r)=gcd(nc,mc-knc)\\ =gcd(nc,(m-kn)c),所以我們只需要證gcd(n,m-kn)=1即可。\\ 設n=xd,m-kn=yd,那麼m=kn+yd=kxd+yd,進而a=(kx+y)cd,b=xcd\\ ,於是gcd(a,b)就可以表示爲gcd((kx+y)cd,xcd)=cd,如果要讓它等於c,那麼d=1,即\\ gcd(n,m-kn)=1。 \]
放上模板代碼:
int gcd(int a,int b){
if(!b) return a;
return gcd(b,a%b);
}
//壓行之後:
int gcd(int a,int b){ return b?gcd(b,a%b):a; }