已知一個正整數N,問從1~N中任選出三個數,他們的最小公倍數最大可以爲多少。
輸入一個正整數N。
1 <= N <= 106。
思路:當n爲奇數時,n與n-2必互質,故答案應爲n*(n-1)*(n-2)
當n爲偶數時,情況就變得稍微複雜一些了
貪心算法的思想是整體最優解可以通過一系列局部最優解來得到,故可以分情況討論
如果是偶數的話,分兩種情況:
(1)如果 n 是偶數且不是三的倍數, 比如8,那麼跳過n-2這個數而選擇 8 7 5 能保證不會最小公倍數被除以2。所以最小公倍數的最大值爲n * (n – 1) * (n – 3)
(2)如果 n 是偶數且爲三的倍數,比如6,如果還像上面那樣選擇的話,6和3相差3會被約去一個3,又不能構成最大值了。那麼最小公倍數的最大值爲(n – 1) * (n – 2) * (n – 3)
#include<iostream>
using namespace std;
int main()
{
long long int n;
while(cin>>n)
{
if(n<=2)
{
cout<<n<<endl;
}
else if(n%2==1)
{
cout<<n*(n-1)*(n-2)<<endl;
}
else if(n%3==0)
{
cout<<(n-1)*(n-2)*(n-3);
}
else
{
cout<<n*(n-1)*(n-3)<<endl;
}
}
return 0;
}