1. 程式人生 > 實用技巧 >最大公約數

最大公約數

一、更相減損法

兩個正整數a和b(a>b),它們的最大公約數等於a-b的差值c和較小數b的最大公約數。

我來介紹一下這個演算法的優點,就是避免了大整數取模導致效率低下,但是運算次數要比輾轉相除多得多,所以我們在使用的時候需要判斷一下。

int gcd(int a,int b)
{
    if(a==b)
    return a;
    if(a>b)
    return gcd(a-b,b);//小的在後面
    if(a<b)
    return gcd(b-a,a);
}

二、輾轉相除法

兩個正整數a和b(a>b),它們的最大公約數等於a除以b的餘數c和b之間的最大公約數。

其實就是把更相減損變得更高階一點(加減運算變乘除運算,提升了一個級別)

但是大整數取模會讓一些題極為頭疼,所以我們還是要慎重考慮什麼時候用更相減損什麼時候用輾轉相除。

int gcd(int a,int b)
{
    if(a<b)
     swap(a,b);
    if(b==0)
     return a;
    else return gcd(b,a%b);
}

條件表示式寫法:

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