hdu1239

来源:互联网 发布:炒股模拟软件新手 编辑:程序博客网 时间:2024/05/18 22:43
/*
分析:
    下面的摘是杭电课件里面的分析:
  摘:
    p,q的范围其实可在2—50000(why?)
然而,这是最小的范围吗?
考虑大于10000的某个质数,不妨设为Q,另一个质数为P,则:
1、如果P<10,P/Q<0.001
2、如果P>10,P*Q>100000
而考虑到a,b的取值范围(1<=a<=b<=1000)
可知min(a/b)=0.001
同时,要求: p*q<=m<=100000
所以无论如何质数都不能超过10000。(事实上,不会超过9091)


                                                2012-04-20
*/








#include"stdio.h"#include"string.h"#include"math.h"int main(){int prime[2000],k;int num[10001];int i,l;int temp;int m;double a,b;double limit;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(temp=2*i;temp<=10000;temp+=i)num[temp]=1;prime[k]=i;k++;}}while(scanf("%d%lf%lf",&m,&a,&b),m!=0||a!=0||b!=0){limit=a/b;max=0;for(i=k-1;i>=0;i--){for(l=i;l>=0;l--){if(prime[i]>m||prime[l]>m||prime[i]*prime[l]>m)continue;if((double)prime[l]/prime[i]<limit)continue;if(prime[i]*prime[l]>max){max=prime[i]*prime[l];w=prime[i];h=prime[l];}}}printf("%d %d\n",w>h?h:w,w>h?w:h);}return 0;}


原创粉丝点击