日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

欧几里得算法原理

發布時間:2023/12/31 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 欧几里得算法原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

輾轉相除法簡介:

輾轉相除法, 又名歐幾里德算法(Euclidean algorithm),是求最大公約數的一種方法。它的具體做法是:用較大數除以較小數,再用出現的余數(第一余數)去除除數,再用出現的余數(第二余數)去除第一余數,如此反復,直到最后余數是0為止。如果是求兩個數的最大公約數,那么最后的除數就是這兩個數的最大公約數。

另一種求兩數的最大公約數的方法是更相減損法。

輾轉相除法舉例:

求 10 ,25的最大公約數:
25 / 10 = 2 ······5
10 / 5 ? = 2 ······0
所以10,25的最大公約數為5

輾轉相除法代碼實現:

int gcd(a, b) { return b == 0 ? a : gcd(b, a % b); } //當余數為0時,最大公約數就是a,否則繼續往下遞歸

利用到的原理:(a, b)與(b, a % b)的最大公約數相同。

歐幾里德算法知識點:

1、gcd函數的遞歸層數不會超過4.785lgN + 1.6723, 其中N == max{ a,b },所以不會導致棧溢出。

2、gcd函數不僅可以求解(a, b)的最大公約數,還可以求解小公倍數,lcm(a, b) 代表(a, b)的最小公倍數
那么有lcm(a, b) * gcd(a, b) = a * b
所以:lcm(a,b) = a * b / gcd(a, b) 但是最好寫成:lcm(a,b) = a? / gcd(a, b) * b? 這樣一定程度可以避免 a * b 爆long long .

? ??

? ??

證明:

總結

以上是生活随笔為你收集整理的欧几里得算法原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。