//Accepted 172 KB 172 ms
//该程序为随机性算法,运行时间不定
#include <cstdio>
#include <cstring>
#include <iostream>
#include <ctime>
#include <algorithm>
using namespace std;
],factor_top=-;
//gcd
long long gcd(long long a,long long b)
{
) return a;
return gcd(b,a%b);
}
//a*b%n n<2^62
long long mult_mod(long long a,long long b,long long n)
{
;
while (b)
{
)
{
res+=exp;
if (res>n) res-=n;
}
exp<<=;
if (exp>n) exp-=n;
b>>=;
}
return res;
}
//return a^b%n
long long exp_mod(long long a,long long b,long long n)
{
,exp=a%n;
)
{
)
{
res=mult_mod(res,exp,n);
}
exp=mult_mod(exp,exp,n);
b>>=;
}
return res;
}
//miller_rabin 算法进行素数判定
//判断次数times次 一般取times=10
//return true 则n为素数
bool miller_rabin(long long n,long long times)
{
) return true;
|| !(n&)) return false;
,x,y;
;
==)
{
t++;
u/=;
}
srand(time());
;i<times;i++)
{
a=rand()%(n-)+;
x=exp_mod(a,u,n);
;j<t;j++)
{
y=mult_mod(x,x,n);
&& x!= && x!=n-)
return false; //not prime
x=y;
}
) return false;
}
return true;
}
//pollar_rho 求n的一个质因子
//c 为测试函数中的常数
long long pollard_rho(long long n,int c)
{
,k=;
srand(time());
x=rand()%(n-)+;
y=x;
while (true)
{
i++;
x=(mult_mod(x,x,n)+c)%n;
d=gcd(y-x,n);
&& d<n) return d;
if (y==x) return n;
if (i==k)
{
y=x;
k<<=;
}
}
}
//找出n的所用质因子
void findFactor(long long n,int c)
{
) return ;
))
{
factor[++factor_top]=n;
return ;
}
long long p=n;
while (p>=n)
{
p=pollard_rho(p,c--);
}
findFactor(p,c);
findFactor(n/p,c);
}
];
int m;
int cmp(long long a,long long b)
{
return a>b;
}
void slove()
{
sort(factor,factor+factor_top+,cmp);
m=;
a[]=factor[];
;i<factor_top;i++)
{
])
{
a[m]*=factor[i];
}
else
{
m++;
a[m]=factor[i+];
}
}
}
long long minx,ans;
void dfs(int s,long long num,long long t)
{
)
{
|| (num+t/num<minx))
{
minx=num+t/num;
ans=num;
}
return ;
}
dfs(s+,a[s]*num,t);
dfs(s+,num,t);
}
int main()
{
__int64 s,t,n;
while (scanf("%I64d%I64d",&s,&t)!=EOF)
{
n=t/s;
if (s==t)
{
printf("%I64d %I64d\n",s,t);
continue;
}
//printf("%I64d\n",gcd(t,s));
factor_top=-;
findFactor(n,);
//printf("findFactor()\n");
m=;
slove();
//printf("slove()\n");
minx=-;
dfs(,,n);
//printf("dfs()\n");
if (ans>n/ans) ans=n/ans;
printf("%I64d %I64d\n",ans*s,n/ans*s);
}
;
}