蓝桥杯练习题——最大最小公倍数

时间:2022-02-24 12:23:32

问题描述
已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。
 
输入格式
输入一个正整数N
 
输出格式
输出一个整数,表示你找到的最小公倍数。
 
样例输入
9
样例输出
504
 
数据规模与约定

1 <= N <= 106

 

源码:

import java.util.Scanner;

/**
* 最大最小公倍数
* @author YorkChu
*/
public class Test_27 {
public static void main(String args[]){
Scanner in=new Scanner(System.in);
long n=in.nextLong();
long m;
if(n%2!=0){
//因为N不能整除,所以倒数3个数都是不能相约数,所以最后三个数相乘即为最大的公倍数
m=n*(n-1)*(n-2);
}else{
//能整除的情况
m=getMax(n);
}
System.out.println(m);
in.close();
}
private static long getCommon(long a,long b){
long n=a*b;
long c=a%b;
while(c>0){
a=b;
b=c;
c=a%b;
}
n/=b;
return n;
}

private static long getMax(long n){
long max=(n-1)*(n-2)*(n-3);
int i=1;
while(n*(n-i)*(n-i-1)>max){
int j=i+1;
while(n*(n-i)*(n-j)>max){
long res=getCommon(getCommon(n, n-i), n-j);
if(res>max){
max=res;
}
j++;
}
i++;
}
return max;
}
}

PS:蓝桥网上的测试数据应该有误