📜  cpp 中的 GCD - C++ (1)

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

CPP中的GCD - C++

什么是GCD?

GCD,即最大公约数,是指两个或多个整数的公共因数中最大的一个。

如何在CPP中实现GCD?

在CPP中,可以通过暴力枚举的方式计算GCD。

方法1:暴力枚举

暴力枚举的思路很简单,即从1到两个数中较小的那个数开始逐一尝试是否能同时被两数整除,找出最大的能被两数整除的数,即为两个数的最大公约数。

以下是暴力枚举的代码实现:

int gcd(int a, int b) {
    int m = min(a, b);
    while (m > 0) {
        if (a % m == 0 && b % m == 0) {
            return m;
        }
        m--;
    }
    return 1;
}

该方法的时间复杂度为O(min(a, b))。

方法2:辗转相除

欧几里得算法,也称辗转相除法,是一种求最大公约数的算法,其基本原理是利用两个整数的余数求最大公约数。

以下是辗转相除的代码实现:

int gcd(int a, int b) {
    if (b == 0) {
        return a;
    }
    return gcd(b, a % b);
}

该方法的时间复杂度为O(log(max(a, b)))。

总结

在CPP中,求两个数的最大公约数可以通过暴力枚举和辗转相除两种方法实现。辗转相除法时间复杂度更低,建议优先使用。