最大最小公倍数

题目:

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

思路:

  • 这三个数要两两互质
  1. N为奇数时
     当N为奇数时,N - 1为偶数,N - 2为奇数,显然,数学知识告诉我们,相邻的两个正整数互质。同样的,相邻的两个奇数也是互质的,那么此时题目要求的答案为N * (N - 1) * (N - 2)。

  2. N为偶数时
     因为当N >3时,N 和当N - 3是可能不是互质的,例如3和6。所以偶数时又分为两种可能性:

    • 当3不能整除N时
      当N为偶数时,N - 2同样为偶数,那么就不能满足上面思路的第1点了。但是N和N - 1还是互质的,所以在贪心策略下,我们优先考虑使用更小的值去替换N - 2,而不是替换N 和 N - 1。
      经计算发现 N - 3满足要求,所以此时答案为N * (N - 1) * (N - 3)。
    • 当3能整除N时
      因为N能够被3整除,所以N - 3同样能被3整除,为了不违反三个数要两两互质
      (N - 1) * (N - 2) * ( N - 3)

代码

import java.util.Scanner;

public class A {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        long n=scanner.nextInt();

        if(n<3){
            System.out.println(n);
        }else if(n%2!=0){
            System.out.println(n*(n-1)*(n-2));
        }else if(n%3!=0){
            System.out.println(n*(n-1)*(n-3));
        }else{
            System.out.println((n-1)*(n-2)*(n-3));
        }

        scanner.close();
    }
}

运行结果:
image

posted @ 2021-07-23 16:52  为搞钱而写代码  阅读(93)  评论(0)    收藏  举报