欧几里得算法(Euclidean Algorithm):求最大公约数的经典方法
欧几里得算法是计算两个非负整数最大公约数(Greatest Common Divisor,简称 GCD) 的高效算法,核心思想是 “辗转相除”,其历史可追溯至古希腊数学家欧几里得的《几何原本》(第 7 卷),是算法设计中 “迭代 / 递归思想” 的经典范例。
一、核心原理
1. 关键定理(算法基石)
对任意两个非负整数 a 和 b(假设 a≥b),满足:gcd(a,b)=gcd(b,amodb)其中 amodb 表示 a 除以 b 的余数(余数取值范围:余数)。
2. 终止条件
当余数为 0 时,此时的除数 b 就是原来两个数的最大公约数。例:若 amodb=0,则 gcd(a,b)=b(因为 b 能整除 a,且 b 是自身的最大约数)。
3. 直观理解(以具体例子说明)
求 gcd(48,18):
- 第一步:48mod18=12(48 = 18×2 + 12),因此 gcd(48,18)=gcd(18,12);
- 第二步:18mod12=6(18 = 12×1 + 6),因此 gcd(18,12)=gcd(12,6);
- 第三步:12mod6=0(余数为 0),终止迭代,此时除数 6 就是 gcd(48,18)。
public class EuclideanAlgorithm {public static int gcdIter(int a, int b) {a = Math.abs(a);b = Math.abs(b);while (b != 0) {int temp = b;b = a % b;a = temp;}return a;}public static void main(String[] args) {System.out.println(gcdIter(48, 18)); // 6System.out.println(gcdIter(0, 5)); // 5}
}