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", n);
else if(n%
2 !=
0)
{
sum = n*(n-
1)*(n-
2);
printf("%lld\n", sum);
}
else if(n%
3 ==
0)
{
sum = (n-
1)*(n-
2)*(n-
3);
printf("%lld\n", sum);
}
else
{
sum = n*(n-
1)*(n-
3);
printf("%lld\n", sum);
}
return 0;
}
转载于:https://www.cnblogs.com/RootVount/p/11250412.html
相关资源:JAVA上百实例源码以及开源项目