import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {int n = 2022; //从下标为1开始,方便计算int[] q = new int[n]; //存储最短路q[1] = 0; //起始条件for (int i = 2; i <= 2021; i++) {q[i] = Integer.MAX_VALUE; //数组初始化放入一个大数}//dp//当前q[j] 表示 从 1~j的最短距离//q[j] 可以是 当前 1~j的最短距离 或者 前一状态 到 该点的最短距离for (int i = 1; i <= 2020; i++) {for (int j = i + 1; j <= 2021 && (j - i <= 21); j++) {q[j] = Math.min(q[j], q[i] + le(i, j)); //dp递推公式}}System.out.println(q[2021]);}//求最大公约数static int gcd(int a, int b) {return b != 0 ? gcd(b, a % b) : a;}//求最小公倍数static int le(int a, int b) {return a * b / gcd(a, b);}
}
最小公倍数等于两数乘积除以最大公约数