问题描述:已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。
输入格式:输入一个正整数N。
输出格式:输出一个整数,表示你找到的最小公倍数。
样例输入:9
样例输出:504
数据规模与约定:1 <= N <= 106。
解析:要求最小公倍数中的最大数,其实就是当三个数的最大公约数为 1 ,即三个数互为质数时,三个数的乘积最大。例如对于 9 来说,9*8*7 = 504。刚开始我的思路是将数字 N 分为奇数与偶数两种处理方式,为奇数时输出 n*(n-1)*(n-2),为偶数时输出 n*(n-1)*(n-3),但是当 N = 6,按上面的思路结果为:6*5*3 = 90,很明显这三个数不互为质数,得出的答案是错误的。正确的应该是 5*4*3 = 60。由此想到,之前只考虑了当 n 为偶数时,n-2 也必为偶数,与 n 不互为质数,那么同理,当 n为 3 的倍数时,所得的 n-3 与 n 也不互为质数,所以应该将 n 分三种情况讨论。
- n 为偶数且为 3 的倍数时,输出 (n-1)*(n-2)*(n-3)
- n 为偶数但不是 3 的倍数时,输出 n*(n-1)*(n-3)
- n 为奇数,n-1 与 n-2 和 n 互为质数,输出 n*(n-1)*(n-2)
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
double n = sc.nextDouble();
double ret = 1;
if(n%2 == 0){
if(n%3 == 0){
ret = (n-1)*(n-2)*(n-3);
}else {
ret = n * (n - 1) * (n - 3);
}
}else{
ret = n * (n-1) *(n-2);
}
System.out.println((long)(ret));
}
}
}