题目链接传送门
题意:
需要找到两个数(不妨设为p,q)满足以下条件: p,q均为质数;
p*q<=m; a/b <=p/q <=1;(p、q的比例约束),求最接近m的p,q.
思路:
所以在2-10000内枚举就好了
#include <iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define maxn 11000
using namespace std;
int prime[maxn],m,a,b,num=0;
bool vis[maxn];
void Erathosthenes()//筛选素数
{
int n=10000;
memset(vis,0,sizeof(vis));
for(int i=2; i<=n; i++)
if(!vis[i])
{
prime[num++]=i;
for(int j=i*i; j<=n; j+=i)
vis[j]=i;
}
}
int main()
{
int i,j,l,h,closem;
double s;
Erathosthenes();
while(~scanf("%d %d %d",&m,&a,&b)&&m&&a&&b)
{
double s=(double)a/b;
closem=0;
for(i=num-1; i>=0; i--)
for(j=i; j>=0; j--)
{
if(prime[i]>m||prime[j]*prime[i]>m||((double)prime[j]/prime[i])<s)
continue;
if(prime[i]*prime[j]>closem)//满足条件,更新数值
{
closem=prime[i]*prime[j];
h=prime[i];
l=prime[j];
}
}
printf("%d %d\n",l,h);
}
return 0;
}