问题描述
已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。
输入格式
输入一个正整数N。
输出格式
输出一个整数,表示你找到的最小公倍数。
样例输入
9
样例输出
504
数据规模与约定
1 <= N <= 106
思路
- 数学知识:如果三个数互为质数,那么这三个数的乘积便为它们的最小公倍数。
- 那么最优的情况肯定是 n*(n-1)*(n-2)。
- 那么我们来分情况考虑:
(1)当n为奇数的时候 eg: (7 6 5)
任意两个数都互质,所以最小公倍数为 765;
(2)当n为偶数的时候
eg:(10 9 8)因为10 和 8并不互质,所以不是最优解。此时我们可以将 8变为7 , 得 (10 9 7)两个相差为2的奇数肯定互质,10 和 7之间相差为3。总结如下:
1. 如果n(10)不是3的倍数,那么 (n,n-1,n-3)肯定两两互质。
2. 如果n是3的倍数,那么我们可以将n-1变成奇数再取最优解 (n-1,n-2,n-3)
代码如下:
#include<iostream>
using namespace std;
int main(){
long long N,result=0;
cin>>N;
if(N<=2){//当没有三个连续的数时
result=N;
}
else if(N%2){//N为奇数时
result=N*(N-1)*(N-2);
}
else{//N为偶数时
if(N%3){
result=N*(N-1)*(N-3);
}else{
result=(N-1)*(N-2)*(N-3);
}
}
cout<<result<<endl;
return 0;
}
这里唯一要注意的就是数据类型,最好定义成long long,不会出错。