The Unsolvable Problem
题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=45783
题意:
给定一个整数n(2 < = x < = 10^9),我们应该找到一双正整数a,b,满足a + b = n和a,b的最小公倍数是尽可能大;
输出这个最大的最小公倍数。
题目要求要T组案例。
案例:
Sampl Input
3
2
3
4
Sample Output
1
2
3
解题思路:
由于2<=x<=10^9数据太大如果用从1开始一一枚举的方法会超时;
分析会发现a,b越接近x/2,它们的最小公倍数最大。
判断n是奇数还是偶数,如果是奇数就输出x/2*x/2+1,
如果是偶数在进行判断,如果x==2输出1,
如果x/2是偶数输出x/2-1*x/2+1;
否则输出 x/2—2*x/2+2。
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int t; 6 cin>>t; 7 while(t--) 8 { 9 long long x; 10 cin>>x; 11 if(x==2) 12 cout<<1<<endl; 13 else if(x%2==1) 14 cout<<(x/2)*(x/2+1)<<endl; 15 else if((x/2)%2==1) 16 cout<<(x/2-2)*(x/2+2)<<endl; 17 else 18 cout<<(x/2-1)*(x/2+1)<<endl; 19 } 20 return 0; 21 }