http://acm.hdu.edu.cn/showproblem.php?pid=1239
#include < iostream >
#include
< cmath >
using   namespace  std;
int  prim[ 1230 ]; // 10000以内的素数共1229个
int  main()
{
    
int i,j,k;//k记录10000以内素数的个数
    bool primes[10000];
    primes[
1= 0;
    
for(i=2;i<=10000;i++)
        primes[i] 
= 1;
    
for(i=2;i<=5000;i++)
    
{
        
if(primes[i] == 1)
        
{
            
for(j=2;j*i<=10000;j++)
                primes[j
*i] = 0;
        }

    }

    
for(i=1,k=0;i<=10000;i++)
        
if( primes[i] == 1)
            prim[k
++= i;
    
int m,p,q,maxs,id,jd;
    
while(cin>>m>>p>>&& m+p+q)
    
{
        maxs 
= 1;
        
for(i=k-1;i>=0;i--)//素数值越来越小
        {
            
for(j=i ; j<k; j++)//素数值越来越大
            {
                
if(prim[i] * prim[j] > m || (double)prim[i]/prim[j] < (double)p/q )
                    
break;
                
if(maxs < prim[i] * prim[j])
                
{
                    maxs 
= prim[i] * prim[j];
                    id 
= i;
                    jd 
= j;
                }

            }

        }

        cout
<<prim[id]<<" "<<prim[jd]<<endl;
    }

    
return 0;
}