算法训练 最大最小公倍数
时间限制:1.0s 内存限制:256.0MB
问题描述
已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。
输入格式
输入一个正整数N。
输出格式
输出一个整数,表示你找到的最小公倍数。
样例输入
9
样例输出
504
数据规模与约定
1 <= N <= 106。
注意:
1.数据大,int 会超过范围;
2.推导过程:
n 为奇数时, 毫无疑问 n * (n - 1) * (n - 3) 最大,且是最小公倍数,应为两两之间没有公约数,因为相邻的n, n -1 只差为1,肯定不能,而 n, n - 2 之间差 2 但都是奇数,有都不能被2整除,故,三者之积为最小公倍数;
n 为偶数时:
n * (n - 1) * (n - 3) 这样应该是最大的,但是无法保证 n, n - 3 之间不能被3整除,如,9,10, 11, 12, 故此时就得用下面的式子最大了;
(n - 1) * (n - 2) * (n - 3), 这样(n-1)为奇数,如第一种情况了,所以一定三者没有大于1的公约数。
另外: 当 n = 1, n = 2时公式不适用了!!!要特判。
import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner cin = new Scanner(System.in); long n; n = cin.nextLong(); if(n == 1) { System.out.println(1); } else if(n == 2) { System.out.println(2); } else { if(n % 2 == 0) { // System.out.println(Math.max(n * (n - 1) * (n - 3), (n - 1) * (n - 2) * (n - 3)) ); //n 和 n - 3 之间可以会被3整除,如9,10,11,12 if(n % 3 == 0) { System.out.println((n - 1) * (n - 2) * (n - 3)); } else { System.out.println(n * (n - 1) * (n - 3)); } } else { System.out.println(n * (n - 1) * (n - 2)); } } } }