最大的最小公倍数
求三个数的最小公倍数可以类比两个数的最小公倍数
当两个数互质时,最小公倍数即是两数乘积
因此 当三个数互质时,最小公倍数即是三数乘积
假设一个正整数N,由贪心策略,首先判断最大的三个数N,N-1,N-2
当N为奇数时,N与N-2均为奇数,两个相邻奇数互质,同时由数学知识可知,两个相邻整数互质,因此N,N-1,N-2三个数互质,最大的最小公倍数为NN-1N-2
当N为偶数时,N与N-2存在公因数2,因此使用N-3对其中一个数进行替换,由于贪心策略,因此,对最小的N-2进行替换,此时判断N,N-1,N-3是否互质。N-1,N-3为相邻奇数,因此互质,N,N-1为相邻正整数因此互质,所以关键在于N与N-3是否互质:
- 当N与N-3存在公因数3时,N与N-3不互质,使用贪心策略将N用N-2替换,即转换成为N为奇数的情况,此时最大的最小公倍数为N-1N-2N-3;
- 当N与N-3不存在公因数3时,N与N-3互质,因此此时最大的最小公倍数为NN-1N-3
注意数据大小,两个10e6的数相乘可能超int
#include<iostream>
using namespace std;
typedef long long LL;
LL n;
LL MaxLcm(LL n)
{
if(n<=2) return n;
else if(n%2==0)
{
if(n%3==0) return (n-1)*(n-2)*(n-3);
else return n*(n-1)*(n-3) ;
}
else
return n*(n-1)*(n-2);
}
int main()
{
while(scanf("%lld",&n)!=EOF)
{
LL ans =MaxLcm(n);
printf("%lld\n",ans);
}
}