算法训练 最大最小公倍数
时间限制:1.0s 内存限制:256.0MB
问题描述
已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。
输入格式
输入一个正整数N。
输出格式
输出一个整数,表示你找到的最小公倍数。
样例输入
9
样例输出
504
数据规模与约定
1 <= N <= 106。
本题典型贪心算法,分析:
当N <= 2时,只有一个或者两个数的时候,直接输出N;
当N > 2时,①N不是偶数,最小公倍数最大为
N
×
(
N
−
1
)
×
(
N
−
2
)
N \times (N-1) \times (N-2)
N×(N−1)×(N−2);
例:
②N是偶数,但不能被3整除,最大为
N
×
(
N
−
1
)
×
(
N
−
3
)
N \times (N-1) \times (N-3)
N×(N−1)×(N−3);
③N是偶数,且能被3整除,最大为
(
N
−
2
)
×
(
N
−
1
)
×
(
N
−
3
)
(N-2) \times (N-1) \times (N-3)
(N−2)×(N−1)×(N−3);
原因是他们之间不会相互有公因数,他们的最小公倍数就不会被除,这种情况下,最小公倍数最大,符合贪心算法思想。代码如下:
#include <iostream>
using namespace std;
int main ()
{
long long n;
cin >> n;
long long result;
if(n <= 2) //注意特殊情况,只有一个或者两个数的时候。
result = n;
else if(n % 2)
{
result = n * (n-1) * (n-2);
}
else
{
if(n % 3)
result = n * (n-1) * (n-3);
else
result = (n-2) * (n-1) * (n-3);
}
cout << result;
return 0;
}