Description
盖伦是个小学一年级的学生,在一次数学课的时候,老师给他们出了一个难题:
老师给了一个正整数n,需要在不大于n的范围内选择三个正整数(可以是相同的),使它们三个的最小公倍数尽可能的大。盖伦很想第一个解决这个问题,你能帮助盖伦拿到“first blood”吗?
Input
首先是一个正整数T,表示有T组测试数据
每组测试数据是一个正整数n(1<=n<=10^6)
Output
对于每组测试数据,输出最大的最小公倍数,每个输出单独占一行
Sample Input 1
2
9
7
Sample Output 1
504
210
思路
首先任意两个相邻的数互质,则最优情况为n×(n-1)×(n-2)
但n为偶数时,n与(n-2)至少有个公因子2,此时便不满足条件
所以需要分两种情况讨论
n为奇数时:最优解便是n×(n-1)×(n-2)
n为偶数时:首先考虑的时n×(n-1)×(n-3)
但是n与(n-3)可能有最小公因子数3,则此时再分两种情况讨论
即n为偶数不能整除于3:最优解为n×(n-1)×(n-3)
n为偶数但能整除于3:最优解为(n-1)×(n-2)×(n-3)
需要注意的点时数据需要开到***long long***
代码
#include <iostream>
using namespace std;
int main()
{
int T;
cin >> T;
while (T--) {
long long n;
cin >> n;
if (n == 1) {
cout << 1 << endl;
}
else if (n == 2) {
cout << 2 << endl;
}
else{
if (n % 2 != 0) {
cout << n * (n - 1) * (n - 2) << endl;
}
else {
if (n % 3 == 0) {
cout << (n - 1) * (n - 2) * (n - 3) << endl;
}
else {
cout << (n ) * (n - 1) * (n - 3) << endl;
}
}
}
}
return 0;
}