就是给你一个数 n,让你求 <= n的三个不重复的数的最小公倍数最大。。。可以参考样例
解体思路:
当 n==1 , 2 3 的时候需要特判一下。。
然后就当 n 是奇数的时候,就是等于 n*(n-1)*(n-2);
当 n 是偶数的时候, n 与 n-2 有最大公约数 2,还得考虑 n 与 n-3是不是有最大公约数。。。
如果n 与 n-3有最大公约数,那么就需要比较(n-1)*(n-2)*(n-3), 和n*(n-1)*(n-2)/2
否则的话,就需要比较(n-1)*(n-2)*(n-3) , n*(n-1)*(n-3)) 和 n*(n-1)*(n-2)/2
上代码:
#include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <vector> #include <queue> #include <algorithm> #include <set> using namespace std; #define MM(a) memset(a,0,sizeof(a)) typedef long long LL; typedef unsigned long long ULL; const int maxn = 1e5+5; const int mod = 1073741824; const double eps = 1e-10; const int INF = 0x3f3f3f3f; LL gcd(LL a, LL b) { if(b == 0) return a; return gcd(b, a%b); } int main() { LL n; while(cin>>n) { if(n==1 || n==2) cout<<n<<endl; else if(n == 3) puts("6"); else { if(n & 1) cout<<n*(n-1)*(n-2)<<endl; else { if(gcd(n,n-3) == 1) cout<<max(max((n-1)*(n-2)*(n-3),n*(n-1)*(n-3)),n*(n-1)*(n-2)/2)<<endl; else cout<<max((n-1)*(n-2)*(n-3),n*(n-1)*(n-2)/2)<<endl; } } } return 0; } /** 6 -> 60 508 -> 130065780 **/