刚开始看到这个题目的时候第一想法就是枚举1~N中任意三个数,然后求它们的最小公倍数,从这些最小公倍数中再选择最大的一个即为正确答案,可是1<=N<=10^6,如果要枚举任意三个数,最简单的做法就是三个嵌套的for循环,这样的话时间复杂度为O(N^3),会运行超时的。 还有一个用int类型长度会不够!
问题描述
已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。
输入格式
输入一个正整数N。
输出格式
输出一个整数,表示你找到的最小公倍数。
样例输入
9
样例输出
504
数据规模与约定
1 <= N <= 106。
代码实现(java):
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long x = sc.nextInt();
long max;
if(x <= 2) {
max = x;
}else if(x % 2 == 1) {
max = x * (x-1) * (x-2);
}else {
if(x % 3 == 0) {
max = (x - 1) * (x - 2) * (x -3);
}else {
max = x * (x - 1) * (x -3);
}
}
System.out.println(max);
}
}