- Description
已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。
- Input
输入一个正整数N。3 <= N <= 10^6
- Output
输出一个整数,表示你找到的最小公倍数。
Sample Input
9
Sample Output
504
分析
贪心算法,直接从倒数三个最大的数开始考虑:
如果倒数第一个数为奇数,那么三个数中,有2个数都是奇数,最大公约数就为1,最小公倍数就为
n*(n-1)*(n-2);
如果倒数第一个数为偶数,那就往后移,考虑n(n-1)(n-3),此时n和n-3相差3,要满足n不能被3整除,否则只能是n(n-1)(n-2)
#include<iostream>
using namespace std;
int main()
{
long long n,temp;
while(cin>>n){
if(n<3)//n小于3.直接返回n
temp=n;
else
{
if(n%2) //若n为奇数,3个连着的数有2个都是奇数,直接返回n*(n-1)*(n-2)
temp=n*(n-1)*(n-2);
else if(n%3) //考虑能否被三整除
temp=n*(n-1)*(n-3);
else
temp=(n-1)*(n-2)*(n-3);
}
cout<<temp<<endl;
}
return 0;
}