试题 算法训练 最大最小公倍数
资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。
输入格式
输入一个正整数N。
输出格式
输出一个整数,表示你找到的最小公倍数。
样例输入
9
样例输出
504
数据规模与约定
1 <= N <= 106。
如果用遍历暴力求解的话全部运行超时,所以要利用最小公倍数的规律。
n为奇数时:三个连续自然数,如果两个是奇数,那么三数之积就是最小公倍数。则为n(n-1)(n-2)。
n为偶数时:如果想利用上面的规律就要加以变换(n与n-2有公因数2)为n、n-1、n-3,这样一来n到n-3会经过一个3的循环。针对3的循环再做讨论:只有n和n-3可能有公因数3,当n%3!=0时,n(n-1)(n-3)最大。当n%3==0时,由于上式要除以3,所以选取除了n的连续三个自然数,为(n-1)(n-2)(n-3)。
#include<iostream>
using namespace std;
int main(){
long long max=0,N;
cin>>N;
if(N<3)
max=N;
else if(N%2==1)
max=N*(N-1)*(N-2);
else
if(N%3==0)
max=(N-1)*(N-2)*(N-3);
else
max=N*(N-1)*(N-3);
cout<<max;
return 0;
}