Zhao70's Blog

UVA11388

题目链接 Uva11388

题目大意

已知两个数的最大公约数(GCD)和最小公倍数(LCM), 求两个数字, 要求第一个数字最小, 第二个数字最大

解题思路

1
2
3
4
5
6
7
由GCD和LCD的性质得,
LCM * GCD == a * b,
a = xG;
b = yG;
L / G == x * y;
若L % G != 0; 则说明 x * y 中存在小数 即无解
若有解, 最小为G 另一个为L

代码

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
32
#include <iostream>
using namespace std;
int gcd(int, int);
int lcm(int, int);
int main()
{
int nTest;
cin >> nTest;
while(nTest)
{
int G, L;
cin >> G >> L;
if(L % G != 0)
{
cout << -1 << endl;
nTest--;
continue;
}
cout << G << " " << L << endl;
nTest--;
}
return 0;
}
int gcd(int a, int b)
{
while(b ^= a ^= b ^= a %= b);
return b;
}
int lcm(int a, int b)
{
return (a * b) / gcd(a, b);
}