SDNU 1464.最大最小公倍数(思维)

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;
}
原文地址:https://www.cnblogs.com/RootVount/p/11250412.html