📅  最后修改于: 2023-12-03 14:40:14.742000             🧑  作者: Mango
GCD,即最大公约数,是指两个或多个整数的公共因数中最大的一个。
在CPP中,可以通过暴力枚举的方式计算GCD。
暴力枚举的思路很简单,即从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))。
欧几里得算法,也称辗转相除法,是一种求最大公约数的算法,其基本原理是利用两个整数的余数求最大公约数。
以下是辗转相除的代码实现:
int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
该方法的时间复杂度为O(log(max(a, b)))。
在CPP中,求两个数的最大公约数可以通过暴力枚举和辗转相除两种方法实现。辗转相除法时间复杂度更低,建议优先使用。