HDU 1239 Calling Extraterrestrial Intelligence Again
2013-09-24 21:45
405 查看
是个小搜索题吧!不过也要注意一下剪枝。
需要找到两个数(不妨设为p,q)满足以下条件:
1、 p,q均为质数;
2、p*q<=m;
3、a/b <= p/q <= 1;
要找到输出所有满足以上条件的p,q中乘积最大的一对p,q。
剪枝:
考虑大于10000的某个质数,不妨设为Q,另一个质数为P,则:
a、如果P<10,P/Q<0.001。
b、如果P>10,P*Q>100000。
而考虑到a,b的取值范围(1<=a<=b<=1000): 可知min(a/b)=0.001; 同时要求: p*q<=m<=100000。所以无论如何质数都不能超过10000。
AC代码:
路途中。。。。
需要找到两个数(不妨设为p,q)满足以下条件:
1、 p,q均为质数;
2、p*q<=m;
3、a/b <= p/q <= 1;
要找到输出所有满足以上条件的p,q中乘积最大的一对p,q。
剪枝:
考虑大于10000的某个质数,不妨设为Q,另一个质数为P,则:
a、如果P<10,P/Q<0.001。
b、如果P>10,P*Q>100000。
而考虑到a,b的取值范围(1<=a<=b<=1000): 可知min(a/b)=0.001; 同时要求: p*q<=m<=100000。所以无论如何质数都不能超过10000。
AC代码:
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int q[10008],w[2013]; int main() { int n,ant=0,sum,i,j,maxx; int x,y,a,b; double ans,cot; memset(q,0,sizeof(q)); for(i=2;i<=10000;i++) { if(q[i] == 0) { w[ant++]=i; for(j=2*i;j<=10000;j+=i) q[j]=1; } } while(scanf("%d%d%d",&n,&a,&b) && n && a && b) { ans=(double )a/b; sum=maxx=0; for( i=0;i<ant;i++) { for(j=i;j<ant;j++) { cot=(double )w[i]/w[j]; if(cot < ans || n < w[i]*w[j]) break; sum=w[i]*w[j]; if(maxx < sum) { maxx=sum; x=w[i];y=w[j]; } } } printf("%d %d\n",x,y); } return 0; }
路途中。。。。
相关文章推荐
- DB_DOMAIN的一点知识
- hdu1848 Fibonacci again and again
- hdu 1021Fibonacci Again
- uva 573 The Snail
- 你需要了解的未来:Andrew Ng,与他的Google Brain项目及人工智能实践
- paip.提高用户体验----增添开始菜单类似360小助手按钮总结
- paip.invalid conversion from FormWdg* to SOCKET {aka unsigned int}
- Project Baselines and the Triple Constraints
- 错误 2 (net::ERR_FAILED): 未知错误
- Configuration System Failed to Initialize
- 支持视音频和图片无线传屏以及屏幕镜像的Airplay的前世今生
- trainging contest#1(2011大连现场赛)C BY bly
- toj1036 Rails
- The Definition of Air Jordan 11 For Sneaker Amateur
- shopt nullglob, failglob, extglob, globstar用法
- 直接插入排序(Straight Insert Sort)
- HDU 2457 DNA repair(AC自动机 + DP 入门)
- QWaitConditon应用
- Google Play V3 Purchaing An Item
- 无法解决 equal to 运算中 "Chinese_PRC_CI_AS" 和 "Chinese_Taiwan_Stroke_CI_AS" 之间的排序规则冲突。