时间限制:1.0s 内存限制:256.0MB
问题描述
已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。
输入格式
输入一个正整数N。
输出格式
输出一个整数,表示你找到的最小公倍数。
样例输入
9
样例输出
504
数据规模与约定
1 <= N <= 106。
思路:
刚开始想的就是简单的n*(n-1)*(n-2),理所应当的想成了n是奇数的情况。
如果n是偶数的情况的话,那么n和n-2肯定是有公约数2的。如果抛去n-2缩小数值考虑n-3。那么也需要判断n是否能够被3整除。如果不能整除那么最大的数值就是n*(n-1)*(n-3),不再需要向下考虑。如果是能够整除,再向下考虑的话,又会被2整除。那么我们需要定住(n-1)*(n-2)。(n-3)是奇数,此时最大的数值就是(n-1)*(n-2)*(n-3)。
小于等于2的时候情况单独处理,计算过程中n是long long类型的,不然会错误。
代码:
#include<iostream> #include<cstring> #include<algorithm> #include<cstring> using namespace std; int main() { long long ans; long long n; scanf("%lld",&n); if(n<=2) { ans=n; } else if(n%2) { ans=n*(n-1)*(n-2); } else { if(n%3) { ans=n*(n-1)*(n-3); } else { ans=(n-1)*(n-2)*(n-3); } } printf("%lld",ans); return 0; }