问题描述
已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。
输入格式
输入一个正整数N。
输出格式
输出一个整数,表示你找到的最小公倍数。
样例输入
9
样例输出
504
数据规模与约定
1 <= N <= 106。
思路:先说一个结论吧,任意两个相邻的数都互质。那么最优的情况肯定是 n*(n-1)*(n-2)
我们来分析一下:
1. 当n为奇数的时候 eg: (7 6 5) 任意两个数都互质,所以最小公倍数为 7*6*5;
2. 当n为偶数的时候 eg: (10 9 8)因为10 和 8并不互质,所以不是最优解。
此时我们可以将 8变为7 , 得 (10 9 7)两个相差为2的奇数肯定互质,10 和 7之间相差为3
如果n(10)不是3的倍数,那么 (n,n-1,n-3)肯定两两互质。如果n是3的倍数,那么我们可以将n-1
变成奇数再取最优解 (n-1,n-2,n-3)
总结:
当 n 为奇数时 最优解 n*(n-1) * (n-2)
当 n 为偶数时
n是3的倍数:(n-1)*(n-2)*(n-3)
不是3的倍数: n*(n-1)*(n-3)
代码如下:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
ll n;
cin>>n;
if(n&1)
cout<<n*(n-1)*(n-2)<<endl;
else
{
if(n%3==0)
cout<<(n-1)*(n-2)*(n-3)<<endl;
else
cout<<(n)*(n-1)*(n-3)<<endl;
}
}