A. Restoring Numbers
time limit per test 2.0 s
memory limit per test 256 MB
Pavel had two positive integers a
and b
. He found their sum s
and greatest common divisor g
, and forgot a
and b
after that. Help him to restore the original numbers.
Input
A single line contains two integers s
and
g
(
1
≤
s
≤
1
0
9
,
1
≤
g
≤
1
0
9
)
g (1 ≤ s ≤ 10^9, 1 ≤ g ≤ 10^9)
g(1 ≤ s ≤ 109, 1 ≤ g ≤ 109)— sum and greatest common divisor of the numbers
aand
b`.
Output
If Pavel made a mistake and there are no such numbers a
and b
, output a single number - 1
.
Otherwise, output two positive integers a
and b
on a single line, separated by a space. If there are multiple possible solutions, output any of them.
解析:
如果使用暴力的做法会导致超时,卡第21
个样例过不去,所以我们优化一下算法,令其中一个数字a
的值为g
,那么如果g
和s - g
的g
为题干中输入的g
那么输出符合的结果,否则一定不会存在这个值a
和b
My Solution
#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b )
{
return b ? gcd(b, a % b ) : a;
}
int main()
{
long long s, g, k;
cin >> s >> g;
if(gcd(g, s - g) == g && s != g)
cout << max(g, s - g) << " " << min(g, s - g) << endl;
else cout << "-1" << endl;
return 0;
}