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);
}
}
最小公倍数等于两数乘积除以最大公约数