欧几里德——最大公约数(辗转相除法)

算法本质
有两个数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;
}



原创文章 30 获赞 10 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_36043263/article/details/102027777
今日推荐