The Unsolvable Problem
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 318 Accepted Submission(s): 179
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
这是今天多校的一道签到题,算了,说多了都是泪啊,题目的意思很简单就是
给出一个n,要求在所有满足n = a+b的a和b里面求a和b的最小公倍数最大的两个数的最小公倍数。
思路就是先特判n==2的情况,否则若n为奇数,则答案显然是n/2 和 n/2+1,若n为偶数设n=2*k,若k为偶数,则答案为k-1,k+1,否则答案为k-2,k+2。
下面是代码:
#include <string>
#include <cstring>
#include <vector>
#include <cassert>
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
int main(){
int T;
__int64 n;
__int64 sum;
cin>>T;
while(T--){
cin>>n;
if(n==2)
cout<<1<<endl;
else{
if(n%2){
sum=(n/2)*(n-(n/2));
cout<<sum<<endl;
}
else{
if((n/2)%2==0){
sum=(n/2-1)*(n/2+1);
cout<<sum<<endl;
}
else{
sum=(n/2-2)*(n/2+2);
cout<<sum<<endl;
}
}
}
}
return 0;
}