Description
问题描述 已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。
Input
输入一个正整数 N(1<=N<=10^6)
Output
输出一个整数,表示你找到的最小公倍数
Sample Input
9
Sample Output
504
思路:网上说这道题用o(n^3)的会T,都是假的!我用o(log n)的做法也T了!惨无人道。后来只能用数学的方法。
如果n是个奇数,则(最大最小公倍数) = n*(n-1)*(n-2)
如果n是个偶数,如果n是3的倍数,则(最大最小公倍数) = (n-1)*(n-2)*(n-3)
否则(最大公约数) = n*(n-1)*(n-3)
#include <cstdio> #include <iostream> #include <cmath> #include <string> #include <cstring> #include <algorithm> #include <queue> #include <vector> #include <map> using namespace std; #define ll long long const int inf = 0x3f3f3f3f; const int mod = 1e9+7; ll n, sum; int main() { scanf("%lld", &n); if(n <= 2)printf("%lld ", n); else if(n%2 != 0) { sum = n*(n-1)*(n-2); printf("%lld ", sum); } else if(n%3 == 0) { sum = (n-1)*(n-2)*(n-3); printf("%lld ", sum); } else { sum = n*(n-1)*(n-3); printf("%lld ", sum); } return 0; }