文章目录
  1. 1. 题目描述
  2. 2. 输入格式
  3. 3. 输出格式
  4. 4. 样例一
    1. 4.1. input
    2. 4.2. output
    3. 4.3. explanation
  5. 5. 样例二
    1. 5.1. input
    2. 5.2. output
  6. 6. 限制与约定
  7. 7. codes

题目描述

这一天,小Y、小D、小C正在愉快地玩耍。

小Y是个数学家,他一拍脑袋冒出了一个神奇的完全平方数 $n$。

小D是个机鬼,很快从小Y嘴里套出了 $n$ 的值。然后在脑内把 $n$ 写成了 $a \times b$的形式。其中 $a, b$都是正整数。

小C是个八卦狂,他发现小D从小Y那里获知了神奇的东西,于是死缠烂打追问小D。最后小D说道:“我可以告诉你正整数 $g$ 和 $l$ 的值,我保证 $ab = gl = n$ 且 $a, b$ 都是 $g$的倍数。但是 $a, b$ 我可不能告诉你。”

这可急坏了小C。他决定退而求其次,找出$a + b$的最小值和最大值。请你帮帮他吧!

输入格式

第一行一个正整数 $T$,表示有 $T$ 组询问。

接下来 $T$ 行每行两个正整数 $g, l$ 表示一组询问。

输出格式

对于每个询问输出一行两个正整数,分别表示 $a + b$ 的最小值与最大值。保证问题有解。

C/C++ 输入输出 long long 时请用 %lld。C++ 可以直接使用 cin/cout 输入输出。

样例一

input



1
1 4

output


4 5


explanation

只有三组解:${a = 1, b = 4}, {a = 2, b = 2}, {a = 4, b = 1}$。

样例二

input


1
2 8

output


8 10

限制与约定

测试点编号$g, l$
1$\leq 10^3$
2
3
4$\leq 10^9$
5
6
7$\leq 10^{18}$
8
9
10

保证 $T \leq 5$。

时间限制:$1 \texttt{s}$

空间限制:$256 \texttt{MB}$

codes

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
ll gcd(ll a, ll b)
{
return b? gcd(b, a%b):a;
}
int T;
ll g, l;
int main()
{
scanf("%d", &T);
while(T--)
{
scanf("%lld %lld", &g, &l);
ll gc=gcd(g, l);
ll gt=g/gc;
ll lt=l/gc;
ll ans=(ll)sqrt(gt*lt)*gc;
printf("%lld %lld\n", ans+ans, g+l);
}
return 0;
}
文章目录
  1. 1. 题目描述
  2. 2. 输入格式
  3. 3. 输出格式
  4. 4. 样例一
    1. 4.1. input
    2. 4.2. output
    3. 4.3. explanation
  5. 5. 样例二
    1. 5.1. input
    2. 5.2. output
  6. 6. 限制与约定
  7. 7. codes