这段代码是一个实现求两个整数最大公约数(Greatest Common Divisor, GCD)的经典算法,通常称为欧几里得算法(Euclidean algorithm)。下面是对这个函数的详细解释:
int gcd(int a, int b) {
while (b != 0) {
int temp = b; // 将b的值暂存到temp中
b = a % b; // 用a除以b的余数来更新b的值
a = temp; // 将原来的b值(现在保存在temp中)赋给a
}
return a; // 当b变为0时,循环结束,此时a即为两数的最大公约数
}
这个算法的基本思想是利用辗转相除法(也称欧几里得除法)来求两个数的最大公约数。在任意给定两个正整数a、b(假设a>b),它们的最大公约数与b、a%b的最大公约数相同。其中“%”表示取模运算,即a除以b的余数。
算法的步骤如下:
- 比较两个数a和b,如果b为0,则最大公约数为a,算法结束。
- 否则,将a除以b得到的余数赋值给b,原来的b值赋给a。
- 重复步骤1和2,直到b为0为止,此时的a即为最大公约数。
这个算法之所以有效,是因为根据数学原理,两个整数的最大公约数不会比它们中较小的那个数大。通过不断将较大的数替换为两数相除的余数,直到余数为0,此时另一个数就是两数的最大公约数。
例如,求48和18的最大公约数:
- 48 % 18 = 12,此时a=18, b=12
- 18 % 12 = 6,此时a=12, b=6
- 12 % 6 = 0,此时a=6, b=0,循环结束,6即为48和18的最大公约数。