歐幾里德——最大公約數(輾轉相除法)

算法本質
有兩個數A,B,假設A>B, 他們的最大公約數等同於B與A%B的求最大公約數,有點像遞歸, 最後算到A’x%B’x恰好等於0時,B’x則爲所有數對之間的最大公約數

#include <iostream>
#include <string>

using namespace std;

int getMaxDivisor(int a, int b);

int core(int max, int min);

int main() {

    cout << "請輸入第一個數" << endl;
    int a;
    cin >> a;
    cout << "請輸入第二個數" << endl;
    int b;
    cin >> b;
    cout << "要求的最大公約數的兩個數分別爲:a=" << a << ",b = " << b << endl;
    cout << "最大公約數爲:" << getMaxDivisor(a, b) << endl;
}


int getMaxDivisor(int a, int b) {
    if (a > b)
        return core(a, b);
    else return core(b, a);
}

int core(int max, int min) {

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



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