最大公约数和最小公倍数
最大公约数
两个数 a 和 b 的最大公约数是指它们所有公约数中最大的那个,通常记作
gcd(a, b)
。
定义
- 公约数:能同时整除 a 和 b 的正整数。
- 最大公约数:所有公约数集合中的最大值。
- 例如:
gcd(12, 18) = 6
,因为 6 是 12 和 18 的最大公约数。
求解方法
1. 欧几里得算法(辗转相除法)
原理:对于正整数 a 和 b,有
gcd(a, b) = gcd(b, a % b)
,其中%
表示取模运算(求余数)。
该方法通过不断缩小问题规模,最终找到最大公约数。
详细介绍查看:欧几里得算法-CSDN博客
关键点:
- 递归公式:
gcd(a, b) = gcd(b, a % b)
。 - 终止条件:当 b = 0 时,
gcd(a, 0) = a
。 - 适用范围:a 和 b 应为非负整数,且至少一个不为 0。
步骤:
- 用 a 除以 b,得余数 a % b。
- 将 b 作为新的 a,a % b 作为新的 b,继续计算。
- 重复上述过程,直到余数为 0,此时被除数即为最大公约数。
示例:
求 gcd(48, 18)
:
- 48 ÷ 18 = 2 余 12,
gcd(48, 18) = gcd(18, 12)
。 - 18 ÷ 12 = 1 余 6,
gcd(18, 12) = gcd(12, 6)
。 - 12 ÷ 6 = 2 余 0,
gcd(12, 6) = gcd(6, 0)
。 - 当 b = 0 时,结果为 6。
因此,gcd(48, 18) = 6
。
代码实现:
// 递归版本
int gcd(int a, in