资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。
输入格式
输入一个正整数N。
输出格式
输出一个整数,表示你找到的最小公倍数。
样例输入
9
样例输出
504
数据规模与约定
1 <= N <= 106。
解题思路:
为了寻找最大的最小公倍数,我们自然要把目光放到最大的几个数上面,通过分析有三种情况:
1.最大的数为奇数,那么其中任意两个数的公因子都是1,此时最大的三个数为(n, n - 1, n -2)奇偶奇,直接相乘即可。
2.最大的数为偶数且不能被3整除,此时n与n - 2有公因子2,所以为了避免损失,将n - 2移到n - 3。n, n - 1, n - 3相乘即可。
3.最大的数为偶数且能被3整除,此时n - 3也能被3整除,n - 1往后移动又和n有公因数2了,不如将n, n - 1都往后移动一个数,(n - 1) (n - 2) (n - 3), 奇偶奇,问题迎刃而解。
总的来说这道题的思路很重要,不然会走很多弯路,而且数学的基本功要扎实,不然意识不到最大的几个数的关系。
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long n,ans; //防止ans值溢出
cin >> n;
if (n <= 2) // n小于等于2自然最大的最小公倍数为2
{
ans = n;
}
else if(n % 2 == 1) { // n是奇数,一定没有公因数3,所以尽管乘在一起
ans = n * (n-1) * (n-2);
}
else
{
if (n % 3 == 0) //n是偶数且被3整除,整体往后推一个
ans = (n - 1) * (n - 2) * (n - 3);
else //第三个往后推一个
ans = n * (n - 1) * (n - 3);
}
cout << ans << endl;
return 0;
}
本篇的代码参考自这位老哥: https://blog.csdn.net/wr132/article/details/43538151