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  
原文地址:https://www.cnblogs.com/dzzy/p/4692569.html