0
点赞
收藏
分享

微信扫一扫

蓝桥杯 试题 算法训练 最大最小公倍数


问题描述

已知一个正整数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;
}

 

举报

相关推荐

0 条评论