算法__求最大公約數

我們在小學時候就學過好幾種求最大公約數的方法:輾轉相除法,更相減損法,短除法。

輾轉相除法:是用較大的數除以較小的數。如果整除則較小的數就是這兩個數的最大公約數,如果沒有的話,就用較小的數和餘數中大的數除以兩個數中較小的數,直至整除爲止,最後的除數就是最大公約數。

更相減損法:先判斷兩個數是否爲偶數,如果是的話先除以2,然後較大的數減去較小的數,直到減數和值相等爲止。最後的值再乘以約掉的2的個數再乘以2。

輾轉相除的代碼如下:

public int maxNumber(int numberOne, int numberTwo) {
    if (numberOne == numberTwo)
        return numberOne;
    if (numberOne < numberTwo)
        return maxNumber(numberTwo, numberOne);
    else {
        if (numberOne % numberTwo == 0)
            return numberTwo;
        else
            return maxNumber(numberTwo, numberOne % numberTwo);
    }
}

更相減損法的代碼如下:

public int getMaxNumebr(int numberOne, int numberTwo) {
    if (numberOne == numberTwo)
        return numberOne;
    if (numberOne < numberTwo)
        return getMaxNumebr(numberTwo, numberOne);
    else {
        if ((numberOne & 1) != 1 && (numberTwo & 1) != 1)
            return getMaxNumebr(numberOne >> 1, numberTwo >> 1) << 1;
        else if ((numberOne & 1) == 1 && (numberTwo & 1) != 1)
            return getMaxNumebr(numberOne >> 1, numberTwo);
        else if ((numberOne & 1) == 1 && (numberTwo & 1) != 1)
            return getMaxNumebr(numberOne,numberTwo>>1);
        else
            return getMaxNumebr(numberTwo,numberOne-numberTwo);
    }
}

第二種方法比第一種好,因爲第一種取模較爲消耗。

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