题意:给你一个大于4的整数m和一个真分数a/b,求最佳素数对p、q,使得a/b<=p/q<=1且pq<=m。最佳即为满足条件的pair中pq最大的一对。
各种打表
zsd:素数的提取
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int prime[2000],k;
int num[10001];
int i,l;
int t;
int m;
double a,b;
double ro;
int w,h;
double max;
memset(num,0,sizeof(num));
num[0]=num[1]=1;
k=0;
for(i=2;i<=10000;i++)
if(num[i]==0)
{
for(t=2*i;t<=10000;t+=i)
num[t]=1;
prime[k]=i;
k++;
}
while(cin>>m>>a>>b&&(m!=0||a!=0||b!=0))
{
ro=a/b;
max=0;
for(i=k-1;i>=0;i--)
{
for(l=i;l>=0;l--)
{
if(prime[i]*prime[l]>m||(double)prime[l]/prime[i]<ro)
continue;
if(prime[i]*prime[l]>max)
{
w=prime[l];
h=prime[i];
max=prime[i]*prime[l];
}
}
}
cout<<w<<" "<<h<<endl;
}
return 0;
}