题解 | #求最小公倍数#
求最小公倍数
https://www.nowcoder.com/practice/22948c2cad484e0291350abad86136c3
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); ArrayList<Integer> factorList1 = new ArrayList<>(); ArrayList<Integer> factorList2 = new ArrayList<>(); int num1 = sc.nextInt(); int num2 = sc.nextInt(); getFactors(num1, factorList1); getFactors(num2, factorList2); //判断特殊条件 两个数能直接整除 if (num2 % num1 == 0) { System.out.println(num2); return; } if (num1 % num2 == 0) { System.out.println(num1); return; } //判断特殊条件 两个数都是素数 if (factorList1.size() == 0 || factorList2.size() == 0) { System.out.println(num1 * num2); return; } int result = 1; //去除公因数(逻辑删除:将要清除位置的值置为1),将公因数乘入result for (int i = 0; i < factorList1.size(); i++) { int factor = factorList1.get(i); if (factorList2.contains(factor)) { int index = factorList2.indexOf(factor); factorList1.set(i, 1); factorList2.set(index, 1); result *= factor; } } //遍历因数数组,将非公因数乘入result for (int i = 0; i < factorList1.size(); i++) { result *= factorList1.get(i); } for (int i = 0; i < factorList2.size(); i++) { result *= factorList2.get(i); } System.out.println(result); } /** * 递归得到一个数的因数数组 */ public static boolean getFactors(int num, ArrayList<Integer> list) { for (int i = 2; i <= Math.sqrt(num); i++) { if (num % i == 0) { list.add(i); if (getFactors(num / i, list)) return true; } } list.add(num); return true; } }