杭电1239题
//数值型搜索题 关键点:缩小素数的范围
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
int prime[10000];
int num = 0;
void generate_prime()
{
for(int i=2;i<10000;++i)
{
bool isPrime = true;
for(int i1=2;i1<=sqrt(double(i));++i1) //(1)此处注意是<=sqrt(i),例如当i=4的情况(2)sqrt调用时一定要注意加double,否则会出现编译错误(因为math.h中重载了sqrt函数)
{
if(i % i1==0)
{
isPrime = false;
break;
}
}
if(isPrime)
{
prime[num] = i;
num++;
}
}
}
int main()
{
int m,a,b;
//生成1-10000之间的素数
generate_prime();
//freopen("1.txt","r",stdin);
while(cin>>m>>a>>b && !(m==0 && a==0 && b==0))
{
int mul=1;
int p,q;
for(int i2=num-1;i2>-1;--i2) //q
{
for(int i3=i2;i3>-1;--i3) //p
{
if(prime[i2]*prime[i3]<=m && (double)prime[i3]/prime[i2]>=(double)a/b) //整数相除一定要注意加double,特别注意结果小于1的时候
{
//cout<<prime[i3]<<" "<<prime[i2]<<endl; //有可能中间的两个数的乘积最大
if(mul < prime[i2]*prime[i3])
{
mul = prime[i2]*prime[i3];
p = prime[i3];
q = prime[i2];
break;
}
}
}
}
cout<<p<<" "<<q<<endl;
}
//fclose(stdin);
return 0;
}