Description
盖伦是个小学一年级的学生,在一次数学课的时候,老师给他们出了一个难题:
老师给了一个正整数 n,需要在不大于n的范围内选择三个正整数(可以是相同的),使它们三个的最小公倍数尽可能的大。盖伦很想第一个解决这个问题,你能帮助盖伦拿到“first blood”吗?
Input
首先是一个正整数T,表示有T组测试数据
每组测试数据是一个正整数n(1<=n<=10^6)
Output
对于每组测试数据,输出最大的最小公倍数,每个输出单独占一行
Sample Input
2
9
7
Sample Output
504
210
1 # include <cstdio> 2 # include <cstring> 3 # include <iostream> 4 # define LL long long 5 using namespace std ; 6 7 LL gcd(LL a,LL b) 8 { if(b==0) 9 return a; 10 return gcd(b,a%b); 11 } 12 13 LL lcm(LL a,LL b) 14 { 15 return a/gcd(a,b)*b; 16 } 17 18 19 int main () 20 { 21 // freopen("in.txt","r",stdin) ; 22 int T ; 23 cin>>T ; 24 25 while (T--) 26 { 27 LL n ; 28 cin>>n ; 29 LL i , j , k , Max = 0; 30 LL t ; 31 for (i = n ; i >= 1 ; i--) 32 { 33 if (i*i*i < Max) 34 break ; 35 36 for (j = n ; j >= 1 ; j--) 37 { 38 if (i*j*j < Max) 39 break ; 40 41 for (k = n ; k >= 1 ; k--) 42 { 43 if (i*j*k < Max) 44 break ; 45 t = lcm(i,lcm(j,k)) ; 46 if (t > Max) 47 Max = t ; 48 49 } 50 } 51 } 52 cout<< Max<<endl ; 53 } 54 55 56 57 return 0 ; 58 }