1. 程式人生 > >算法學習筆記1.2.1 歐幾裏得算法

算法學習筆記1.2.1 歐幾裏得算法

說明 進行 歐幾裏得算法 log 學習筆記 最大公約數 turn 個數 就是

任務

求兩個數a,b的最大公約數gcd(a,b)。

說明

由貝祖定理得,gcd(a,b)=gcd(b,a-b),其中a>=b。通過這樣不斷的叠代,直到b=0,a就是原來數對的最大公約數。考慮到只使用減法會超時,我們觀察到如果a-b4仍然大於b的話,要進行一次同樣的操作,就把a減到不足b為止,所以gcd(a,b)=gcd(b,a mod b)。由此可以在log的時間內求出兩個數的gcd。

接口

int gcd(int a, int b);
  • 復雜度:O(logN),其中N和a,b同階
  • 輸入:a,b 兩個整數
  • 輸出:a,b的最大公約數

代碼

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

算法學習筆記1.2.1 歐幾裏得算法