HDU 4627 The Unsolvable Problem 解题心得

原题:

Description

There are many unsolvable problem in the world.It could be about one or about zero.But this time it is about bigger number.
Given an integer n(2 <= n <= 10 9).We should find a pair of positive integer a, b so that a + b = n and [a, b] is as large as possible. [a, b] denote the least common multiplier of a, b.
 

Input

The first line contains integer T(1<= T<= 10000),denote the number of the test cases.
For each test cases,the first line contains an integer n.
 

Output

For each test cases, print the maximum [a,b] in a line.
 

Sample Input

3 2 3 4
 

Sample Output

1 2 3
 
 
 
分析:这题暴力破解是行不通的吧,因为数据太大了 ,可以用数学方法解题,
分奇数偶数讨论,再特判一下特殊情况2
还要注意  2 <= n <= 10 9    
所以所有由n得出的数据都要用__int64去定义
 
代码如下
#include<iostream>

#include<cstdio>

#include<vector>

#include<algorithm>

using namespace std;







        



int main()

{

    int t;

    cin >> t;

    while (t--){

        __int64  n;

        cin >> n;

        __int64   ans = 0;

        if (n % 2 == 0){

            if (n == 2) 

                ans = 1;

            else{

                if ((n / 2) % 2 == 0){

                    ans = (((n / 2) - 1)* (n / 2 + 1));

                }

                else{

                        ans = (((n / 2) - 2)* (n / 2 + 2));

                }

            }

        }

        else{

            ans = (n / 2 * ((n / 2) + 1));

        }

        cout << ans << endl;

    }





    return 0;

}
View Code

 

 

你可能感兴趣的:(HDU)