2015安徽省赛 A.First Blood
题目描述
盖伦是个小学一年级的学生,在一次数学课的时候,老师给他们出了一个难题: 老师给了一个正整数 n,需要在不大于n的范围内选择三个正整数(可以是相同的),使它们三个的最小公倍数尽可能的大。盖伦很想第一个解决这个问题,你能帮助盖伦拿到“first blood”吗?
输入
首先是一个正整数T,表示有T组测试数据 每组测试数据是一个正整数n(1<=n<=10^6)
输出
对于每组测试数据,输出最大的最小公倍数,每个输出单独占一行
样例输入
2 9 7
样例输出
504 210
第一次写的版本相当复杂,在万杰提示下改用位运算化很多:
1 #include <iostream> 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 using namespace std; 6 long long A; 7 int main() 8 { 9 int C; 10 cin >>C; 11 while(C--) 12 { 13 cin>>A; 14 if(A<3) 15 {cout<<A<<endl;} 16 else if(A&1) {cout<<A*(A-1)*(A-2)<<endl;} 17 else if(A%3) {cout<<A*(A-1)*(A-3)<<endl;} 18 else {cout<<(A-1)*(A-2)*(A-3)<<endl;} 19 } 20 return 0; 21 } 22 /************************************************************** 23 Problem: 1205 24 User: 2014217052 25 Language: C++ 26 Result: 正确 27 Time:4 ms 28 Memory:1500 kb 29 ****************************************************************/ 30