hdu1239 参考答案
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 #include
16 using namespace std;
17 const int N=10000;
18 bool flag[N];
19 int prim[N]={2};
20 int num=1;
21 int m,a,b;
22 void Init()
23 {
24 memset(flag,1,sizeof(flag));
25 flag[0]=flag[1]=false;
26 for(int i=0;i<N;i=i+2)
27 flag[i]=false;
28 int x;
29 while(1)
30 {
31 x=prim[num-1]+1;
32 while(flag[x]==false&&x<N)
33 x++;
34 if(x==N)
35 break;
36 prim[num++]=x;
37 for(int i=x+x;i<N;i=i+x)
38 flag[i]=false;
39 }
40 }
41 void Search()
42 {
43 int Max=1;
44 int p,q,p1,q1;
45 int tmp;
46 for(int i=num-1;i>=0;i--)
47 {
48 q=prim[i];
49 if(q+q>m)
50 continue;
51 if(q*q<Max)
52 break;
53 for(int j=i;j>=0;j--)
54 {
55 p=prim[j];
56 tmp=p*q;
57 if(tmp>m)
58 continue;
59 if(tmp<=Max)
60 break;
61 if(a*q<=b*p&&tmp>Max)
62 {
63 Max=tmp;
64 p1=p;
65 q1=q;
66 }
67 }
68 }
69 printf("%d %d\n",p1,q1);
70 }
71 int main()
72 {
73 Init();
74 while(scanf("%d %d %d",&m,&a,&b))
75 {
76 if(m==0&&a==0&&b==0)
77 break;
78 Search();
79 }
80 }
hdu1239 参考答案 (2008-09-19 16:35:11由218编辑)