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

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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值