#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<math.h>
#define N 50001
using namespace std;
bool prime[N];
int main()
{
int i, j;
for (i = 2; i<N; i++)//先把偶数给删了
{
if (i % 2 == 0 && i != 2)prime[i] = false;
else prime[i] = true;
}
for (i = 3; i <= sqrt((double)N); i += 2)//筛法核心:就是当i是质(素)数的时候,i的所有的倍数必然是合数。
{
if (prime[i])
for (j = i + i; j<N; j += i)
prime[j] = false;
}
/* for(i=2;i<100;i++)
{
if(prime[i])
printf("%d\n",i);
}
*/
int m=0, a=0, b=0, maxn=0, p=0, q=0,p1,q1;
double temp;
while (scanf("%d%d%d", &m, &a, &b))
{
if (m == 0 && a == 0 && b == 0)
break;
maxn = 0;
temp=(double)a/b;
for (p = 2; p*p <= m; p++)
{
if(prime[p])
{
for (q = 2;p*q <= m; q++)
{
if (prime[q]&&temp<=(double)a/b&&(double)p / q <= 1.0)
{
if (p*q > maxn)
{
maxn = p*q;
p1 = p;
q1 = q;
}
}
}
}
}
printf("%d %d\n", p1, q1);
}
return 0;
}
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
using namespace std;
bool IsPrime(int n)
{
int m = sqrt(n*1.0);
for(int i=2;i<=m;i++)
{
if(n%i==0)
return false;
}
return true;
}
int main()
{
int m,a,b;
while(scanf("%d%d%d",&m,&a,&b))
{
if(m==0&&a==0&&b==0)
break;
int bounds = sqrt(m*1.0);
int max = 0;
int p,q;
for(int i=2;i<=bounds;i++)//判断是否是质数
{
if(!IsPrime(i))
continue;
int e = (i*b)/a;//e肯定比i大
int min = m/i;
if(e>min)
e = min;//两者取最小
for(int j=e;j>=i;j--)
{
if(IsPrime(j))
{
if(i*j>max)
{
max = i*j;
p=i;
q=j;
}
break;
}
}
}
cout<<p<<" "<<q<<endl;
}
return 0;
}