每次遇到这样的题都无从下手,其实根据题意分析一下,并不难,模拟就可以了。这个题先构造100000以内的素数表,然后根据条件判断就OK。
#include<cstdio>
#include<cstring>
#include<cmath>
#define MAXN 100010
using namespace std;
bool prime[MAXN];
void intline()
{
prime[1]=false;
prime[0]=false;
for(int i=2; i*i<MAXN; i++)
{
for(int j=2; j*i<MAXN; j++)
prime[j*i]=false;
}
}
int main()
{
//freopen("in.txt","r",stdin);
int m,a,b,q,p;
memset(prime,true,sizeof(prime));
intline();
while(scanf("%d%d%d",&m,&a,&b)!=EOF&&(m+a+b))
{
int max=0;
for(int i=sqrt(m)+1;i>=2;i--) //p
{
if(prime[i])
for(int j=m/i+1;j>=i;j--)//q
{
if(prime[j])
{
if(a*j<=i*b&&i*j<=m)
{
if(i*j>max)
{
max=i*j;
p=i,q=j;
}
}
}
}
}
printf("%d %d\n",p,q);
}
}