Calling Extraterrestrial Intelligence Again
题目链接
题目大意
题目名字好长~~
题目也好长~~
其实看最后一段就够了…给你三个数m,a,b 现在要你求两个质数p,q满足
ab≤pq≤1 m≥pq max(pq)
max(qp)代表pq乘积最大,求出满足以上3个条件的pq即可。
题解
直接打表暴力。简单粗鲁。
代码
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
using namespace std;
int m,a,b,h,q,p,tab[100005],vis[100005];
void dealtab(int high)
{
h=0;
memset(vis,0,sizeof(vis));
memset(tab,0,sizeof(tab));
for (int i=2;i<=high;i++) if (!vis[i])
{
int j=i;
tab[h++]=i;
while (j<=high)
{
vis[j]=1;
j+=i;
}
}
}
int main()
{
while(scanf("%d%d%d",&m,&a,&b),m!=0 || a!=0 || b!=0)
{
q=0; p=0;
int high=(int) (sqrt(m*(b*1.0/a))+0.5);
dealtab(high);
bool f=0; int ans=0;
for (int i=h-1;i>=0;i--)
for (int j=i;j>=0;j--)
if ((tab[j]*1.0)/tab[i]<=1 && (a*1.0)/(b)<=(tab[j]*1.0)/tab[i] && tab[i]*tab[j]<=m && tab[i]*tab[j]>ans)
{
ans=tab[i]*tab[j];
q=tab[i]; p=tab[j];
break;
}
printf("%d %d\n",p,q);
}
return 0;
}