算法训练 最大最小公倍数
-
问题描述 已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。 输入格式 输入一个正整数N。 输出格式 输出一个整数,表示你找到的最小公倍数。 样例输入 9 样例输出 504 数据规模与约定 1 <= N <= 106。
2.主要代码:
import java.util.Scanner;
public class ALGO_2_1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
long n=sc.nextInt();
long out=0;
if(n%2==1){
out=n*(n-1)*(n-2);
}
else{
if(n%3==0) out=(n-1)*(n-2)*(n-3);
else out=n*(n-1)*(n-3);
//95152 95151 95150 95149
}
System.out.println(out);
}
}
3.反思总结
最小公倍数的求法有两个:
(1) 分解质因数
(2)公式法
对于两个数求最小公倍数,如果这两个数是互为质数(即两个或多个整数的公因数只有1的非零自然数),那么他们的最小公倍数就是两个数的乘积。相邻的两个自然数互为质数 ,对于三个数,左右两个互为质数,但是第一个和第二个不一定。
**a.**如果第一个数为奇数,那么这三个数可以这么表示,奇-偶-奇,第一和第三个数之间相差为2,但是奇数本身的因数里面是没有2的,相邻的三个数的变化范围为2,如果2不是,其他就更不可能是公因子了。此时最大就是相乘
**b.**如果第一个数字是偶数,那么这三个数这么表示,偶-奇-偶,
如果将他们相乘,最后的结果是要除以2的,直接缩小了一倍,那么我们可以改变这三个值得其中一个,然后使得结果尽可能的大,可以将第三个数变小,这是三个数字就变成偶-奇-奇,此时这三数的变化范围最大到了3。如果第一个数字的公因子里面有3,那么第三个数一定有3,结果就会再除以3,这是我们不希望的;这时我们如果变小中间这个数,结果变为偶-偶-奇,结果是三个数字变化中最小的一个,而且结果至少要除以一个2,更小了;于是乎,最好的安排,是整体向后移一个,此时就又变成了奇-偶-奇