歐幾里德算法(輾轉相除)證明


過了這么久,終於知道了輾轉相處的證明了,以前只是記住了,但不是真的很理解,現在寫一下它的證明,以便下次忘了的時候看一下。輾轉相除是求兩個數的最大公約數的。

要證這個定理成立,只需要證明 gcd(a, b) = gcd(b, a % b) 就行了

證明:令a % b = r, 所以a = k * b + r, 所以r = a - k * b,假設d為a,b的一個公約數,那么 d|a,  d|b,(d|a的意思就是d整除a,也就是a能被d整除),所以a - k * b 也一定能被d整除,即 d|r, 也就是 d|(a % b), 因此d也是b 和 (a % b)的公約數,因此a,b 的公約數和b, (a%b)的公約數也是一樣的,其最大公約數也一定相同,所以gcd(a, b) = gcd(b, a % b);

所以有了這個等式之后,基本上就算完了,還有一步就是怎么到最后求個具體的數,當b等於0時候就可以了,因為最后遞歸好多還是和原來的那個公寓數是相同的,最后有0了,他倆的最大公約數就是他本身了,也就是a了,用遞歸代碼如下

1 int gcd(int a, int b)
2 {
3      return (b == 0 ? a : gcd(b, a % b));
4 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM