蓝桥杯-最大最小公倍数

  算法训练 最大最小公倍数  
时间限制:1.0s   内存限制:256.0MB
问题描述

已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。

输入格式

输入一个正整数N。

输出格式
输出一个整数,表示你找到的最小公倍数。
样例输入
9
样例输出
504
数据规模与约定

1 <= N <= 106

解题思路:贪心+数学知识(相邻自然数互质,相邻的奇数互质)

三个数,我们肯定是要尽量从n往下找,如果n为奇数,那么最大值必定是n*(n-1)*(n-2)。

如果为偶数,判断是否是3的倍数,如果不是那么最大值是n*(n-1)*(n-3);否则(n-1)*(n-2)*(n-3)为最大值。

代码:

 1 #include<iostream>
 2 #include<algorithm>
 3 #define ll long long
 4 using namespace std;
 5 int main(){
 6     ll n;
 7     cin>>n;
 8     ll ans=0;
 9     if(n==1){
10         cout<<1<<endl;
11     }else if(n==2){
12         cout<<2<<endl;
13     }else{
14         if(n%2==1){
15             cout<<n*(n-1)*(n-2)<<endl;
16         }else{
17             if(n%3){
18                 cout<<n*(n-1)*(n-3)<<endl;
19             }else{
20                 cout<<(n-1)*(n-2)*(n-3)<<endl;
21             }
22         }
23     }
24     return 0;
25 }

 

posted @ 2018-03-20 20:18  ISGuXing  阅读(682)  评论(0编辑  收藏  举报