java:最大最小公倍数
题目
问题描述
已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。
输入格式
输入一个正整数N。
输出格式
输出一个整数,表示你找到的最小公倍数。
样例输入
9
样例输出
504
数据规模与约定
1 <= N <= 106。
分析
https://blog.csdn.net/wr132/article/details/43538151?ops_request_misc=%7B%22request_id%22%3A%22158175154619725222457580%22%2C%22scm%22%3A%2220140713.130056874…%22%7D&request_id=158175154619725222457580&biz_id=0&utm_source=distribute.pc_search_result.none-task
在一组数中找三个数,使他们的最小公倍数最大,我们知道,两个数的最小公倍数在最大的情况就是当两个数互质的时候,他们的最小公倍数就是这两个数的乘积,而且还有那么一个定理,即两个相邻的自然数互质,即使我们不知道定理怎么证明,但大体能想出来,但这是三个数,也就是说存在 奇-偶-奇 和 偶-奇-偶 两种情况。
一:奇-偶-奇 这种情况用于n是奇数的情况,即 最大的三个数就是 n,n-1,n-2,那么可以看到,因为n和n-2都是奇数,所以肯定不存在公因数2,假设三个数中有一个存在因数3,那么另外两个肯定不存在因数3,因为他们的变化范围都小于3,也就是说,这三个数不仅是最大的,还是互质的,也就是说最大的最小公倍数就是这三个数的乘积,即n*(n-1)*(n-2)相信大部分人都可以想到这一步
import java.util.Scanner;
public class 最大最小公倍数 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
long n=sc.nextLong();
if(n<=2){
System.out.println(n);
}
if(n>2){
if(n%2!=0)
System.out.println(n*(n-1)*(n-2));//当n为奇数的时候输出这个数位最大公倍数
if(n%3==0&&n%2==0)
System.out.println((n-1)*(n-2)*(n-3));//当n为偶数,且可以被3除的时候
if(n%3!=0&&n%2==0)
System.out.println(n*(n-1)*(n-3));
}
}
}