算法训练 最大最小公倍数
资源限制
时间限制: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 }