最大公約數(GCD)與最小公倍數(LCM)是經典數論問題。本文說明輾轉相除法原理,並提供遞迴與迭代兩種 Java 實作。
對任意正整數 a, b:a * b = GCD(a, b) * LCM(a, b)
public static int gcdRecursive(int a, int b) {
if (b == 0) return a;
return gcdRecursive(b, a % b);
}
public static int gcdIterative(int a, int b) {
while (b != 0) {
int r = a % b;
a = b;
b = r;
}
return a;
}
import java.util.Scanner;
public class GcdLcmDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("請輸入兩個正整數:");
long a = sc.nextLong();
long b = sc.nextLong();
long gcd = gcdIterative(a, b);
long lcm = a / gcd * b; // 先除後乘避免溢位
System.out.println("最大公約數:" + gcd);
System.out.println("最小公倍數:" + lcm);
}
// 迭代版 GCD 方法放這裡...
}
a / gcd * b 而非 a * b / gcd,減少中間結果溢位機率。