算法与数据结构-数论之辗转相除法

来源:互联网 发布:淘宝海报素材psd免费 编辑:程序博客网 时间:2024/04/29 12:07

简介

      辗转相除法, 又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法。它是已知最古老的算法, 其可追溯至3000年前。

两个整数的最大公约数是能够同时整除它们的最大的正整数。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。

由辗转相除法也可以推出,两数的最大公约数可以用两数的整数倍相加来表示,这个重要的等式叫做贝祖等式。

原理及其详细证明

     设两数为a、b(b<a),用gcd(a,b)表示a,b的最大公约数,r=a mod b 为a除以b以后的余数,辗转相除法即是要证明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)。

证毕。

计算机算法

long gcd(long a,long b){long temp;while(b>0){temp=a%b;a=b;b=temp;}return a;}


 

原创粉丝点击