📜  euclid 算法 - C++ (1)

📅  最后修改于: 2023-12-03 14:41:01.777000             🧑  作者: Mango

欧几里得算法 - C++

欧几里得算法,也称最大公约数算法,是一个用于计算两个正整数的最大公约数的算法。

实现思路

假设两个正整数为m和n(m > n),则根据欧几里得算法,有如下公式:

m = nq + r

其中q为商,r为余数。

若r为0,则n为最大公约数;否则,进行以下操作:

将被除数n作为除数,上一步的余数r作为被除数,进行一次除法运算,得到商q和余数r。

重复上述步骤,直到余数r为0为止。

代码实现

使用递归方式实现欧几里得算法:

int gcd(int m, int n) {
    if (n == 0) {
        return m;
    }
    return gcd(n, m % n);
}

非递归方式实现欧几里得算法:

int gcd(int m, int n) {
    while (n != 0) {
        int temp = m % n;
        m = n;
        n = temp;
    }
    return m;
}
示例

输入:m = 48, n = 18

输出:6

#include <iostream>

using namespace std;

int gcd(int m, int n) {
    if (n == 0) {
        return m;
    }
    return gcd(n, m % n);
}

int main() {
    int m = 48, n = 18;
    cout << "gcd(" << m << ", " << n << ") = " << gcd(m, n) << endl;
    return 0;
}
总结

欧几里得算法是一个较为简单且亲民的算法,适用于计算两个正整数的最大公约数。使用递归方式实现代码更加简洁,但可能会降低性能;非递归方式实现代码结构稍显复杂,但性能更加优秀。