输入三个数m,a,b,求出p,q使得a/b<=p/q<=1且p*q<m时,p,q的最大值

我是先求出sqrt(99999)中的所有质数,然后通过2个循环求出相应条件的极值

我不知道为啥错,反正自己电脑上是可以出来的。。。

#include <iostream>
#include 
<vector>
#include 
<string>
#include 
<math.h>
using namespace std;

vector
<int> prime;   //存储质数

void prim()
{
    
bool pr;
    
for (int i=(int)sqrt((double)99999);i>1;i--)
    
{
        pr
=true;
        
for (int j=(int)sqrt((double)i);j>1;j--)
        
{
            
if (i%j==0)
            
{
                pr
=false;
                
break;
            }

        }

        
if (pr==true)
        
{
            prime.push_back(i);
        }

    }

}

int main()
{
    
int m;prim();
    
double a,b;
    
while (scanf("%d %lf %lf",&m,&a,&b)!=EOF)
    
{
        
if (m==0&&a==0&&b==0)
        
{
            
break;
        }

        
if(m<=4||a>b||m>100000||a>1000||b>1000||a<1||b<1)
        
{
            
break;
        }

    
int p,q,pmax=0,qmax=0;
    
double ratio=a/b;
    
for (int i=0;i<prime.size();i++)
    
{
        
if (prime[i]>m/2)
        
{
            
continue;
        }

        
if(prime[i]<=m/2)
        
{
            
for (int j=i;j<prime.size();j++)
            
{
                 p
=prime[j];
                q
=prime[i];

                
double newratio=(double)p/(double)q;
                
if (newratio<ratio||p*q>=m)
                
{
                    
continue;
                }

                
if (p*q>pmax*qmax&&newratio>=ratio)
                
{
                    pmax
=p;
                    qmax
=q;
                }

            }
        
        
        }

        
    }

    cout
<<pmax<<" "<<qmax<<endl;
    }

    
}