这就是搜索题。。。。。。。。。。。。。。。。
还是叫打表题吧,如果直接遍历(枚举)的话,会超时的,至少我是的,后然参考了别人打表二字让我豁然开朗。。。
贴码。。。
很容易看出p,q<10000;
#include<iostream>
#include<fstream>
#include<cmath>
#include<cstring>
using namespace std;
int prime[100001],prime2[10000],primenum;
void primelist() //素数判断表
{
for(int i=2;i<100000;i++)
{
for(int j=2;j<100000/i;j++)
prime[i*j]=0;
}
}
void addlist() //素数表
{
int i=0,j=0;
while(i<10000)
{
if(prime[i])
prime2[j++]=i;
i++;
}
primenum=j;
}
int main()
{
//ifstream cin("a.txt");
memset(prime,1,sizeof(prime));
prime[0]=0;prime[1]=0;
primelist();addlist();
int maxpq;
double p,q;
double m,a,b;
while(cin>>m>>a>>b)
{
if(!m&&!a&&!b) break;
maxpq=0;p=0;q=0;
for(int i=primenum;i>=2;i--)
{
if(prime2[i]<m)
{
for(int j=i;j>=0;j--)
{
if(prime2[i]*prime2[j]<=m&&(double)prime2[j]/prime2[i]>=a/b)
{
if(prime2[i]*prime2[j]>maxpq)
{
maxpq=prime2[i]*prime2[j];
p=j;q=i;
}
}
}
}
}
cout<<prime2[(int)p]<<" "<<prime2[(int)q]<<endl;
}
return 0;
}