最大公约数
辗转相除法
int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
这是一种经典的方法,用于计算两个整数的最大公约数。算法基于这个观察:两个数的最大公约数等于其中较小的数和两数相除余数的最大公约数。这个算法一直进行下去,直到余数为零。
这个算法的时间复杂度很低,通常是 O(log(min(a, b)))。
辗转相减法
int gcd(int a, int b) {
while (a != b) {
if (a > b) {
a = a - b;
} else {
b = b - a;
}
}
return a; // 或者返回b,因为此时a和b相等
}
这个算法也用于计算两个整数的最大公约数。它不如欧几里得算法高效,但可以用于教学目的。
这个算法的时间复杂度最坏情况下可能是 O(max(a, b))。
你可以选择其中一个算法来计算两个数的最大公约数,通常欧几里得算法更常用,因为它更高效。如果你需要计算多个数的最大公约数,可以递归地应用这些算法。