理解最大公约数的计算原理
欧几里得算法用于计算两个数的最大公约数 (GCD)。核心思想是:$$ \gcd(a, b) = \gcd(b, a \bmod b) $$
用矩形分割来理解:用较小的矩形去拼成较大的矩形,无法拼完的部分就是余数。
设 $a = q \times b + r$,其中 q 是商,r 是余数 ($r = a \bmod b$)
如果 d 整除 a 和 b,那么 d 也整除 $r = a - q \times b$
如果 d 整除 b 和 r,那么 d 也整除 $a = q \times b + r$
因此,a 和 b 的公约数集合 = b 和 r 的公约数集合
∴ $$ \gcd(a, b) = \gcd(b, r) = \gcd(b, a \bmod b) $$
int gcd(int a, int b) {
while (b != 0) {
int r = a % b;
a = b;
b = r;
}
return a; // b = 0 时,a 就是 GCD
}
步骤 1: gcd(48, 18)
48 ÷ 18 = 2 余 12
→ gcd(48, 18) = gcd(18, 12)
步骤 2: gcd(18, 12)
18 ÷ 12 = 1 余 6
→ gcd(18, 12) = gcd(12, 6)
步骤 3: gcd(12, 6)
12 ÷ 6 = 2 余 0
→ gcd(12, 6) = gcd(6, 0)
步骤 4: gcd(6, 0)
当余数为 0 时,除数就是 GCD
→ gcd(6, 0) = 6
结论:gcd(48, 18) = 6