题解 | #求最小公倍数#
求最小公倍数
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;
}
}

查看1道真题和解析