最大公倍数

最大公倍数

描述
小栖有一个区间[a,b],他准备从中取三个数,他想知道如何取才能使得它们的最小公倍数最大 请直接告诉小栖最小公倍数是多少。

1<=a<b<=5000
b-a>=2

示例

输入: a = 3, b = 6
输出: 60
样例解释: 4,5,6的最小公倍数是60

public class Solution {
    /**
     * @param a: Left margin
     * @param b: Right margin
     * @return: return the greatest common multiple
     */
    public long greatestcommonmultiple(int a, int b) {
        if(b-a==2) return (long)min(min(a,a+1), b);//如果只有三个数,直接计算
		if(b%2==1) {//若b为奇数,那么b和b-1和b-2互质,三数乘积即为区间最大的最小公倍数
			return (long)b*(b-1)*(b-2);
		}else {//若b为偶数,b和b-2有公因数2
			if(b%3==0) {//b为三的倍数,那么b与b-3有公因数3,此时(b-1)*(b-2)*(b-3)互质
				return (long)(b-1)*(b-2)*(b-3);
			}else {//那么b和b-1和b-3互质,三数乘积即为区间最大的最小公倍数
				return (long)b*(b-1)*(b-3);
			}
		}
    }
    public long max(long x,long y) {//最大公因数
		long  temp;
		if(x<y) {
			temp = x;
			x = y;
			y = temp;
		}
		
		while(y!=0) {
			temp = x%y;
			x = y;
			y = temp;
		}
		return x;
	}
	
	public long min(long x,long y) {
		return x*y/max(x,y);//最小公倍数=x*y/最大公因数
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值