pycharm之遠端開發
阿新 • • 發佈:2020-08-03
歐幾里德演算法又稱輾轉相除法,是指用於計算兩個非負整數a,b的最大公約數。
百度百科所言↑
正如其所言,輾轉相除法相信大家小學時便有所聽聞
就是設\(a>b,\)
則有\(gcd(a,b)==gcd(b,a\)%\(b)\)
可以感性理解下為何
嚴格的證明比較複雜,有興趣者見下:
假設其\(gcd\)為\(k\),\(z=a%b\)
則存在\(x,y,q\)使得\(a=kx,b=ky,z=a+qb\)
則\(gcd(x,y)=1,z=a+qb=kx+q(ky)=k(x+qy)\)
則\(gcd(b,z)=gcd(ky,k(x+qy))\)有\(k\)這個因數
設\(gcd((x+qy),y)=c\)
存在\(m,n\)使得\(x+qy=mc,y=nc\)
則\(x=mc-qy=mc-qnc=c(m-qn)\)
\(a=kx=kc(m-qn),b=ky=knc\)
則\(gcd(ab)=k=gcd(kc(m-qn),kcn)=kc\)
所以\(kc=k,c=1,\)則\(gcd((x+qy),y)=1\)
則\(gcd(b,z)=gcd(b,b\)%\(a)=k=gcd(a,b)\)
證畢
(↑↑↑非引用,本人自己打的)
好了這樣的話程式碼就比較好打了,遞迴下去就好了
其中\(b==0\)時\(return\) \(a\)就基本解決了
好了上程式碼↓
int gcd(int a,int b){ if(b==0)return a; return gcd(b,a%b); }
…………………………(懷疑這段程式碼出現的意義所在……)………………………………