The Unsolvable Problem

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 }

 

 

你可能感兴趣的:(ab)