与数论的厮守05:gcd(a,b)=gcd(b,a mod b)的证明

\[设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; }
posted @ 2019-06-26 11:07  修电缆的建筑工  阅读(932)  评论(1编辑  收藏  举报