#include <iostream>
#include <map>
#include <cmath>
#define int long long
using namespace std;
int qpow (int a, int b) {
int ans = 1ll, base = a;
while (b) {
if (b & 1ll)
ans *= base;
base *= base;
b >>= 1ll;
}
return ans;
}
signed main () {
int a, b;
while (cin >> a >> b) {
int x = 0, y = 0;
int tot = b / a;
int m = tot;
map <int, int> cnt;
for (int i = 2; i * i <= m; i ++) {
while (m % i == 0) {
cnt[i] ++;
m /= i;
}
}
if (m > 1)
cnt[m] ++;
int n = cnt.size();
int ans1, ans2;
ans1 = ans2 = 1 * 0x3f3f3f3f * 0x3f3f3f3f;
for (int i = 0; i < (1 << n); i ++) {
int j = 0;
int f1 = 1, f2 = 1;
for (auto x : cnt) {
j ++;
if (i & (1 << j))
f1 *= qpow(x.first, x.second);
else
f2 *= qpow(x.first, x.second);
}
if (f1 + f2 < ans1 + ans2)
ans1 = f1, ans2 = f2;
}
int a1 = ans1, a2 = ans2;
ans1 = min(a1, a2), ans2 = max(a1, a2);
cout << ans1 * a << ' ' << ans2 * a << '\n';
}
return 0;
}
样例没问题,提交全WA