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 # define LL long long 4 using namespace std ; 5 6 LL gcd(LL a,LL b) 7 { if(b==0) 8 return a; 9 return gcd(b,a%b); 10 } 11 12 LL lcm(LL a,LL b) 13 { 14 return a/gcd(a,b)*b; 15 } 16 17 18 int main () 19 { 20 // freopen("in.txt","r",stdin) ; 21 int T ; 22 scanf("%d" , &T) ; 23 while (T--) 24 { 25 LL n ; 26 scanf("%I64d" , &n) ; 27 LL i , j , k , Max = 0; 28 LL t ; 29 30 for (i = n ; i >= 1 ; i--) 31 { 32 if (i*i*i < Max) 33 break ; 34 35 for (j = n ; j >= 1 ; j--) 36 { 37 if (i*j*j < Max) 38 break ; 39 40 for (k = n ; k >= 1 ; k--) 41 { 42 if (i*j*k < Max) 43 break ; 44 t = lcm(i,lcm(j,k)) ; 45 if (t > Max) 46 Max = t ; 47 48 } 49 } 50 } 51 printf("%I64d\n" , Max) ; 52 } 53 54 55 56 return 0 ; 57 }
时间: 2024-10-19 06:32:06