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

136 阅读1分钟

问题描述
已知一个正整数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:蓝桥网上的测试数据应该有误