这就是搜索题。。。。。。。。。。。。。。。。

还是叫打表题吧,如果直接遍历(枚举)的话,会超时的,至少我是的,后然参考了别人打表二字让我豁然开朗。。。

贴码。。。

很容易看出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;

}

posted on 2012-02-12 20:48  fakeAcmer  阅读(201)  评论(0编辑  收藏  举报