数论基础,欧几里得定理
作者:互联网
定理 gcd(a,b)=gcd(b,a%b)
证明
设c=gcd(a,b),那么a可以表示为mc,b可以表示为nc的形式。然后令a=kb+r,那么我们就只需要证明gcd(b,r)=c即可。
∵r=a−kb=mc−knc,∴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) { return b ? gcd(b, a % b) : a; }
标签:gcd,数论,欧几里得,nc,kn,yd,int,cd,定理 来源: https://www.cnblogs.com/PDY08/p/15160310.html