我的蓝桥杯代码仓:https://github.com/617076674/lanqiao
题目描述:
知识点:欧几里得最大公约数算法、贪心算法
思路:三重循环寻找最大的最小公倍数
(1)如果N == 1,显然最大的最小公倍数是1。
(2)如果N == 2,显然最大的最小公倍数是2。
(3)如果N >= 3,设最大的最小公倍数是max,初始化max = 0,外重循环递减,循环范围是[N, 0]且满足i * (i - 1) * (i - 2)) >= max,第二重循环也是递减,循环范围是[i - 1, 0]且满足i * j * (j - 1) >= max,第三重循环也是递减,循环范围是[j - 1, 0]且满足i * j * k >= max。一旦发现i,j,k三个数互相之间的最大公约数均是1,即break出最内层循环。
时间复杂度不好计算,空间复杂度是O(1)。
JAVA代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
if(1 == n) {
System.out.println(1);
}else if(2 == n) {
System.out.println(2);
}else {
long max = 0;
for(long i = n; i >= 0 && i * (i - 1) * (i - 2) >= max; i--) {
for(long j = i - 1; j >= 0 && i * j * (j - 1) >= max; j--) {
for(long k = j - 1; k >= 0 && i * j * k >= max; k--) {
if(gcd(i, j) == 1 && gcd(j, k) == 1 && gcd(i, k) == 1) {
if(max < i * j * k) {
max = i * j * k;
break;
}
}
}
}
}
System.out.println(max);
}
}
private static long gcd(long a, long b) {
if(b == 0) {
return a;
}
return gcd(b, a % b);
}
}
JAVA解题报告: