求GCD(最大公約數)的兩種方式


求GCD(最大公約數)的兩種方式

這篇隨筆講解C++語言程序設計與應用中求GCD(最大公約數,下文使用GCD代替)的兩種常用方式:更相減損法和輾轉相除法,前提要求是具有小學數學的基本素養,知道GCD是什么,並具有C++的語法基礎。

一、更相減損法

兩個正整數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(b==0)
        return a;
    else
        return gcd(b,a%b);
}

條件表達式寫法:

是輾轉相除法的一個簡便寫法,只用一行即可搞定:

int gcd(int x,int y)
{
    return y?gcd(y,x%y):x;
}

下課!祝同學們AK IOI!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM