输入三个数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;
}
}