必会算法总结(2) - 最小公倍数
计算两个数字的最小公倍数我们需要直到数论中这样一条性质:a * b = gcd(a, b) * lcm(a, b)
,所以我们要计算两个数字的最小公倍数lcm
只需要变换一下公式:lcm(a, b) = a * b / gcd(a, b)
。所以核心还是在于计算最大公约数。
算法实现
-
两个数字:
public class Main { public static int gcd(int a, int b) { if (b == 0) { return a; } return gcd(b, a % b); } public static int lcm(int a, int b) { return a * b / gcd(a, b); } public static void main(String[] args) { int a = 6, b = 9; System.out.println(lcm(a, b)); } }
-
多个数字:
public class Main { public static int gcd(int a, int b) { if (b == 0) { return a; } return gcd(b, a % b); } public static int lcm(int a, int b) { return a * b / gcd(a, b); } public static int lcm(int[] nums) { if (nums.length == 1) { return nums[0]; } return lcm(nums[0], lcm(Arrays.copyOfRange(nums, 1, nums.length))); } public static void main(String[] args) { int[] nums = {3, 6, 9}; System.out.println(lcm(nums)); } }