/*
2006 年 12 月 4 日
p,q的取值不可能超过10000。
先由筛法得到10000以内的所有素数,再根据素数的个数得到存放了素数的ip数组。
搜索时注意减少循环次数。
*/
#include <stdio.h>
const int NUM=10001;
int a[10001];
int main(){
int i,j,count=0;
for(i=2;i<NUM;i++) a[i]=1;
for(i=2;i*i<NUM;i++)
if(a[i])
for(j=i*i;j<NUM;j+=i)
a[j]=0;
for(i=2;i<NUM;i++)
if(a[i]) count++;
int* ip=(int*)malloc(count*sizeof(int));
for(i=2,j=0;i<NUM;i++)
if(a[i]) ip[j++]=i;
int m,a,b,p,q,rp,rq,max; /*rp,rq存放的是乘积最大的两个素数的下标*/
double ratio;
while(scanf("%d%d%d",&m,&a,&b)!=EOF){
if(m==0 && a==0 && b==0) break;
ratio=(double)a/b;
max=0;
for(p=count-1;p>=0;p--){
for(q=p;q<=count-1;q++){
if(ip[q]>m || ip[p]*ip[q]>m || ((double)ip[p]/ip[q])<ratio)
break; /*此处的判断可大大减少循环的次数*/
if(ip[p]*ip[q]>max){
max=ip[p]*ip[q];
rp=p,rq=q;
}
}
}
printf("%d %d/n",ip[rp],ip[rq]);
}
free(ip);
}