题目链接

题意:

给定两个数,一个G,一个L,找出两个数a,b(a<=b),使得这两个数的最大公约数为G,最小公倍数为L,且(a最小)。

分析:

当a,b存在时,a一定为G。

自己证了一下,数学方面不太擅长。

假设 a 最小为 kG (其中 k1 != 1), b为 kG, 即 a = G,不满足条件。

那么a*b=k*k*G=L*G

这时一定有 a = G, b = k*kG 满足条件。即a不符合题意。

设 a = G, b = kG

因为 L*G = a*b

b = L*G/a = L.

因为b = kG

b/a=kG/G=k

所以要满足的条件为 L % G == 0

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <algorithm>
#include <cmath> using namespace std; const int maxn = +; typedef long long LL; int main() {
// freopen("my.txt", "r", stdin);
int T;
LL G, L; scanf("%d", &T); while(T--) {
while(cin >> G >> L) {
if(L % G) cout << "-1\n";
else cout << G << ' ' << L << endl;
}
} return ;
}
05-11 13:06