快速求最大公約數和最小公倍數

輾轉相除法

輾轉相除法又名歐幾里得算法(Euclidean algorithm),目的是求出兩個正整數的最大公約數。

這條算法基於一個定理:兩個正整數 a 和 b(a 大於 b),它們的最大公約數等於 a 除以 b 的餘數 c 和 較小數 b 之間的最大公約數。

算法計算過程是這樣的:

  • 2個數相除,得出餘數
  • 如果餘數不爲0,則拿較小的數與餘數繼續相除,判斷新的餘數是否爲0
  • 如果餘數爲0,則最大公約數就是本次相除中較小的數。

代碼實現

public static int method(int a, int b) {
        int max,min,t;
        max = Math.max(a,b);
        min = Math.min(a,b);
        if (max % min == 0) return min;

        t = max % min;
        while (t != 0) {
            max = min;
            min = t;
            t = max % min;
        }
        return min;
    }

上面的代碼是求最大公約數,如果所求的內容不止兩個數,就先求出兩個的最大公約數,然後用這個公約數與第三個繼續求,每次求的時候加一個判斷:如果最大公約數是1的話,後續的也不用求直接返回1即可。

最小公倍數就是兩個數的乘積除以最大公約數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章