问题描述
已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。
输入格式
输入一个正整数N。
输出格式
输出一个整数,表示你找到的最小公倍数。
样例输入
9
样例输出
504
数据规模与约定
1 <= N <= 106。
解题思路:
找规律。N内三个数最大的倍数肯定是n*(n-1)*(n-2)。但是前提是这三个数没有公约数。如果n是奇数,这三个数肯定没有公约数,因为如果有公约数,三个连续数的公约数只可能是2,n为奇数,结论成立。如果n是偶数,n和n-2就有了公约数,肯定要不能选,那么能不能选n-3,就看n是否是3的倍数,如果不是,就选(n-3)*(n-1)*n,如果是,就选(n-3)*(n-1)*(n-2)。
AC代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;
long long ans;
int main(){
long long n;
cin>>n;
if(n<3)//n为1,2时,选1,1,2
ans=2;
if(n%2)
ans=n*(n-1)*(n-2);
else{
if(n%3)
ans=(n-3)*(n-1)*n;
else
ans=(n-3)*(n-1)*(n-2);
}
cout<<ans<<endl;
}