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.
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.
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; }