码迷,mamicode.com
首页 > 其他好文 > 详细

The Unsolvable Problem

时间:2015-07-18 12:17:23      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=45783

题目大意:

     多组案例T(1<=T<=10000),每组案例输入一个数n(2 <= n <= 10 9),有a和b两个数满足a+b=n,又有[a,b]为a和b的最小公倍数,问:[a,b]最大为多少
     案例:

 

              Sample Input

         3 2 3 4

 

              Sample Output

         1 2 3

 

题目分析:

     要注意的是,n数据过于庞大,如果采用枚举方式易超时!对于一个数n,满足条件的a、b有可能有多个,但越接近n/2,a*b越大,所以从n/2处入手,a、b不仅要满足其和为n,同时也需要两者间没有公约数。分情况讨论:

     1.特殊情况n=2,输出结果1;

     2.n为偶数,则又分两种情况:n/2为偶数,输出(n/2-1)*(n/2+1),

                                    n/2为奇数,输出(n/2-2)*(n/2+2);

     3.n为奇数,则输出n/2*(n/2+1)。

注:Microsoft Visual C++6.0不支持long long型,定义n时,编译采用long型,提交采用long long型!

源代码:

 

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int T;
 6     cin>>T;//案例数
 7     while(T--)
 8     {   long long n;
 9         cin>>n;
10         if(n==2) cout<<"1"<<endl;
11         else if(n%2==0) //判断n的奇偶性,n为偶数
12         {   if(n/2%2==0)
13                cout<<(n/2-1)*(n/2+1)<<endl;
14             else cout<<(n/2-2)*(n/2+2)<<endl;
15         }
16         else //n为奇数
17            cout<<n/2*(n/2+1)<<endl;
18     }
19     return 0;
20 }

 

The Unsolvable Problem

标签:

原文地址:http://www.cnblogs.com/huaszjh/p/4656420.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!