First Blood
题目描述
盖伦是个小学一年级的学生,在一次数学课的时候,老师给他们出了一个难题:
老师给了一个正整数 n,需要在不大于n的范围内选择三个正整数(可以是相同的),使它们三个的最小公倍数尽可能的大。盖伦很想第一个解决这个问题,你能帮助盖伦拿到“first blood”吗?
输入
首先是一个正整数T,表示有T组测试数据
每组测试数据是一个正整数n(1<=n<=10^6)
输出
对于每组测试数据,输出最大的最小公倍数,每个输出单独占一行
样例输入
2
9
7
样例输出
504
210
#include<cstdio>
#include<iostream>
using namespace std;
#define ll long long
ll gcd(ll a,ll b)
{
if(b==)
return a;
return gcd(b,a%b);
}
ll dd(ll a,ll b)
{
return a/gcd(a,b)*b;
}
int main()
{
int N;
scanf("%d",&N);
while(N--)
{
ll i,j,k,z,a;
cin>>a;
ll max=;
for(i=a;i>;i--)
{
if(i*i*i<max)
break;
for(j=a;j>;j--)
{
if(i*j*j<max)
break;
for(k=a;k>;k--)
{
if(i*j*k<max)
break;
z=dd(i,dd(j,k));
if(z>max)
max=z;
}
}
}
cout<<max<<endl;
}
}