您的位置:首页 > 其它

POJ 1411

2015-06-09 13:59 197 查看
#include<iostream>
#include<stdio.h>
#include<math.h>
#define MAXN 50000
using namespace std;

void give_list();
double prime[5200] = {0};
int num = 5200;
int main()
{
//freopen("acm.acm","r",stdin);
int i;
int j;
double m;
double a;
double b;
give_list();
i = 0;
j = 0;
int x;
int y;
int k;
int tem;
int max = 0;
while(cin>>m>>a>>b)
{
if(!m)
break;
max = 0;
while(prime[i]*prime[i] <= m) ++ i;
-- i;
k = i;
for(; i >= 0; -- i)
{
for(j = k; j < num; ++ j)
{
tem = prime[i]*prime[j];
if(tem > m||prime[i]/prime[j] < a/b)
break;
if(tem > max)
{
max = tem;
x = prime[i];
y = prime[j];
}
}
}
cout<<x<<" "<<y<<endl;
}
}
void give_list()
{
int i;
int j;
bool prim1[MAXN];
memset(prim1,true,sizeof(bool)*MAXN);
prim1[1] = false;
for(i = 2; i < sqrt(long double(MAXN))+1; i ++)
{
if(prim1[i])
{
j = 2*i;
while(j < MAXN)
{
prim1[j] = false;
j += i;
}
}
}
j = 0;
for(i = 2; i < MAXN; i ++)
{
if(prim1[i])
{
prime[j] = i;
++ j;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: