通信工程应用数学
上QQ阅读APP看书,第一时间看更新

1.2.5 辗转相除法

求两个数的公约数方法中最著名的是欧几里得辗转相除法,简称辗转相除法.最早出现在公元前300年古希腊著名数学家欧几里得的《几何原本》(第VII卷,命题i和ii)中.而在中国则可以追溯至东汉出现的《九章算术》.

设两数为a,b(a>b),求a和b最大公约数(a,b)的步骤如下:

用a除以b,得a÷b=q……r1(0≤r1).若r1=0,则(a,b)=b;若r1≠0,则再用b除以r1,得b÷r1=q……r2(0≤r2).若r2=0,则(a,b)=r1,若r2≠0,则继续用r1除r2,……,如此下去,直到能整除为止.其最后一个非零除数即为(a,b).

分析 设两数为a,b(b<a),用gcd(a,b)表示a,b的最大公约数,r=a mod b为a除以b以后的余数,k为a除以b的商,即a=kb+r.辗转相除法即是要证明gcd(a,b)=gcd(b,r).

证 令c=gcd(a,b),则设a=mc,b=nc,根据前提可知r=a-kb=mc-knc=(m-kn)c,可知c也是r的因数,因此可以断定m-kn与n互质.否则,可设m-kn=xd,n=yd(d>1),则m=kn+xd=kyd+xd=(ky+x)d,即a=mc=(ky+x)dc,b=nc=ycd,故a与b的最大公约数为cd,而非c,与前面结论矛盾.

从而可知gcd(b,r)=c,继而gcd(a,b)=gcd(b,r).

证毕.

对于辗转相除法的原理,也可以从以下三点来理解:

(1)如果a是任一整数,b是任一大于零的整数,则总能找到一整数q,使

a=bq+r

这里r是满足不等式0≤r<b的一个整数.

(2)从a=bq+r知道(a,b)=(b,r),即a和b的最大公因数与b和r的最大公因数是相等的.

这是因为对任意同时整除a和b的数u,有a=su,b=tu,它也能整除r,因为r=a-bq=su-qtu=(s-qt)u.

反过来每一个整除b和r的整数v,有,它也能整除a,因为.

因此,a和b的每一个公因子同时也是b和r的一个公因子,反之亦然.

(3)由于r是a除以b的余数,辗转相除法一直除下去,最后余数一定会得到0.

例1.2.2 a=1047,b=797,求gcd(a,b).

解  1047=1×797+250

797=3×250+47

250=5×47+15

47=3×15+2

15=7×2+1

所以  gcd(a,b)=1

辗转相除法求gcd的算法描述如下:

/*功能:返回正整数m和n的最大公约数*/

(1)如果m>n则将m与n进行交换;

(2)如果n整除m则返回n,否则转(3);

(3)temp=m,m=n,n=temp%n;

(4)转(1).