算法训练 最大最小公倍数

 

资源限制

时间限制:1.0s   内存限制:256.0MB

问题描述

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

输入格式

输入一个正整数N。

输出格式

输出一个整数,表示你找到的最小公倍数。

样例输入

9

样例输出

504

数据规模与约定

1 <= N <= 106

 

从大到小看,首先分为两种情况:N为奇数 和 N为偶数——

①N为奇数:N和N-2都是奇数,互质,N-1是偶数,与N和N-1也互质,那么最大最小公倍数就是三者之积 N*(N-1)*(N-2)(奇-偶-奇);

②N为偶数:N和N-2都是偶数,存在公因数2,这是不允许的,故不取N-2,向前移一位取N-3,那么最大最小公倍数就是 N*(N-1)*(N-3)(偶-奇-奇),但这时需要注意,若N是3的倍数,那么N-3也是3的倍数,两者存在公因数3,这就更不允许了,所以两个奇数不变,我们改那个偶数,即不取N了,而取N-2,那么最大最小公倍数就是(N-1)*(N-2)*(N-3)(奇-偶-奇)。

 

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

 

posted @ 2020-08-17 16:50  自在逍遥处  阅读(132)  评论(0编辑  收藏  举报