1. 程式人生 > >HRBU-ACM 數論2-最大公約數(歐幾里得)

HRBU-ACM 數論2-最大公約數(歐幾里得)

高中我們都學過輾轉相除法,如果有人沒學過或者忘記了那也沒關係,在這裡我們在講解一遍歐幾里得演算法(求最大公約數)

 

歐幾里德演算法是用來求兩個正整數最大公約數的演算法。是由古希臘數學家歐幾里德在其著作《The Elements》中最早描述了這種演算法,所以被命名為歐幾里德演算法。

擴充套件歐幾里德演算法可用於RSA加密等領域。

假如需要求 1997 和 615 兩個正整數的最大公約數,用歐幾里德演算法,是這樣進行的:

當被加的數為 0 時,就得出了 1997 和 615 的最大公約數 1。

    歐幾里德演算法又稱

輾轉相除法,是指用於計算兩個正整數a,b的最大公約數。應用領域有數學和計算機兩個方面。計算公式gcd(a,b) = gcd(b,a mod b)。

至於程式碼嘛。大家可以理解成一個遞迴同時我也會寫出迴圈和遞迴的區別讓大家更好的理解什麼是遞迴

遞迴寫法:

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

迴圈寫法:

int gcd(int a, int b)
{
    while(b)
    {
        int t = b;
        b = a % b;
        a = t;
    }
    return a;
}