4,032
社区成员




你提供的代码是一个使用暴力算法来计算两个数的最大公约数(GCD)的函数。代码的工作原理如下:
i
为输入的两个数 a
和 b
中较小的那个,因为最大公约数不可能大于较小的数。a
和 b
是否都能被 i
整除(即 a % i == 0 && b % i == 0
)。如果满足这个条件,i
就是这两个数的最大公约数,循环终止。i
减 1,然后再次检查。i
减到 1 或找到最大公约数为止。i
的值,即这两个数的最大公约数。然而,这种方法对大数不够高效,因为它的时间复杂度为 (O(\min(a, b)))。更高效的计算 GCD 方法是使用欧几里得算法,其时间复杂度为 (O(\log(\min(a, b))))。
下面是使用欧几里得算法实现的 GCD 计算代码:
long long gcd(long long a, long long b) {
while (b != 0) {
long long temp = b;
b = a % b;
a = temp;
}
return a;
}
这个实现不断将 a
替换为 b
,将 b
替换为 a % b
,直到 b
等于零为止,此时 a
就是最大公约数。