问题描述
已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。
输入格式
输入一个正整数N。
输出格式
输出一个整数,表示你找到的最小公倍数。
样例输入
9
样例输出
504
在一组数中找三个数,使他们的最小公倍数最大。首先,先从两个数的最大公倍数开始,当两个数互质的时候,最小公倍数就是它们的乘积,当然,这也是最大的最小公倍数,所以,拓展到三个数,就是要找出三个两两互质的数。有一个结论我们得先知道,就是相邻的两个自然数是互质的。
一组从1~N的数中,最大的三个数就是N,N-1,N-2,如果这三个数两两互质,那么当然是最大的最小公倍数。
由上面的结论可知,N和N-1,N-1和N-2两两互质。
如果N是奇数,那么N-2也是奇数。那么这两个数不会被2整除,也不会同时被3,5,7,9整除。所以这两个数也两两互质。因此,当N是奇数时,N *(N - 1) * (N - 2)是最大的最小公倍数。
如果N是偶数,显然N和N-2都会被2整除,所以将(N-2)改为(N-3)。如果N不能被3整除,那么最大的最小公倍数为N * (N - 1) * (N -3)。如果N可以被3整除,那么将N改为(N-1),此时最大的最小公倍数为(N - 1)* (N - 2) * (N - 3)。这里(N - 1)为奇数,就跟上一种N是奇数的情况一样。
下面是用Java代码的实现:
import java.util.Scanner;
/**
* 已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long n = sc.nextLong();
if(n % 2 == 0) {
if(n % 3 == 0) {
long m = (n - 1) * (n - 2) * (n -3);
System.out.println(m);
} else {
long m = n * (n - 1) * (n - 3);
System.out.println(m);
}
} else {
long m = n * (n - 1) * (n - 2);
System.out.println(m);
}
}
}