最大公倍数
描述
小栖有一个区间[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/最大公因数
}
}