php最大公约数辗转相除程序,[转]辗转相除求最大公约数
轉:藍魔之淚de萬事屋百度博客
http://hi.baidu.com/didihl/blog/item/533b1fec7cea252063d09f82.html
輾轉相除算法的簡介
在數論中,輾轉相除法(國際上一般稱為Euclidean Algorithm 或
Euclid's Algorithm,即歐幾里得算法)是一種求任意兩個歐幾里得環(Euclidean
Domain)中的單位(如:整數)的最大公約數的算法。這個算法的一個重要特點就是其不需要通過分解因式來求取最大公約數。輾轉相除法正因為其易操作性與易實現性而成為了計算機編程中的一個重要的求最大公約數的常用算法。
輾轉相除法的過程描述與應用
給出兩個自然數?a和?b:檢查?b?是否為0;如果是,則?a?為最大公約數。如果不是,則分別用?b?和?a除?b?的余數作為上一步中的a和b?重復這一檢查步驟。
正如上面所提到的,輾轉相除法是編程中求最大公約數的常用算法,那么下面就是一個C++中通過遞歸實現輾轉相除法的程序段范例:
int gcd (int v1, int v2)
{
return ( b == 0 ?a :gcd(b,a % b
);
}
注:過程名設為?gcd?是為了更明顯的標明這段程序的意圖。因為?gcd是?greatest
common
divisor(最大公約數)的縮寫。再編寫輾轉相除法求最大公約數的過程是,最好將其命名為?gcd以方便他人日后閱讀。
輾轉相除法的證明
設兩數為a、b(b<a),求它們最大公約數的步驟如下:用b除a,得a=bq+r(0≤r<b)(q是這個除法的商)。若r=0,則b是a和b的最大公約數。若r≠0,則繼續考慮。
首先,應該明白的一點是任何 a 和 b 的公約數都是 r
的公約數。要想證明這一點,就要考慮把 r 寫成 r=a-bq。現在,如果 a 和 b 有一個公約數 d,而且設 a=sd ,
b=td, 那么 r = sd-tdq = (s-tq)d。因為這個式子中,所有的數(包括 s-tq )都為整數,所以 r 可以被 d
整除。
對于所有的 d 的值,這都是正確的;所以 a 和 b 的最大公約數也是 b 和 r
的最大公約數。因此我們可以繼續對 b 和 r 進行上述取余的運算。這個過程在有限的重復后,可以最終得到 r=0 的結果,我們也就得到了
a 和 b 的最大公約數。
此法不完備:還需
第四步:可以斷定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】
最大公倍數:x*y/r
參考資料:
3.http://hi.baidu.com/didihl/blog/item/533b1fec7cea252063d09f82.html
4.百度百科:http://baike.baidu.com/view/255668.htm#2
總結
以上是生活随笔為你收集整理的php最大公约数辗转相除程序,[转]辗转相除求最大公约数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件测试计划测试范围怎么写,测试计划模板
- 下一篇: php手机网页_使用PHPCMS搭建wa