[恢]hdu 1239
地址:http://acm.hdu.edu.cn/showproblem.php?pid=1239
题意:给m、a、b。求一对素数p,q(p<q)使得p*q<=m且p/q >= a/b。若有多对,输出p*q最大的一对。
mark:刚开题看了半天,才看明白啥意思。
看到m是10w,然后case是2000组,一下懵了,以为不能枚举。后来冷静分析下,其实可以。
以下是几个比较重要的结论&分析。
1)若m' = p*q,则必不存在另外一对素数p',q'使得m' = p' * q'。
2) 若p固定,q要满足:1、p*q<=m;2、p/q>=a/b。则可以推出q是满足小于min(m/p, p*b/a)的素数,而因为要求p*q最大,所以q应该是满足条件的最大素数。
3) 因为p>=q而且要求p*q <=m,所以p <=sqrt(m)。
因此,我们只需要从2到sqrt(m)枚举每个素数p,计算出相应的q。m是10w,开根号只有300多,非常小,素数就更少了。即使是2000*300也是可以接受的。
代码:
# include <stdio.h># include <stdlib.h># include <math.h> int IsPrime[50010] = {1, 1} ;int Primes[10000] ;int pcnt = 0 ; void init(){int i, j ;for (i = 2 ; i <= 50003 ; i++) {if (!IsPrime[i]) { Primes[pcnt++] = i ;for (j = 2*i ; j <= 50003 ; j+=i) IsPrime[j] = 1 ; } }} int min(int a, int b){return a<b?a:b;} int main (){int m, a, b, sqrtm ;int p, q, ansp, ansq ; init () ;while (~scanf ("%d%d%d", &m, &a, &b) && (m||a||b)) { sqrtm = sqrt(1.0*m) ; ansp = ansq = 1 ;for (p = 0 ; Primes[p] <= sqrtm ; p++) { q = min(m/Primes[p], Primes[p]*b/a) ;while (IsPrime[q]) q-- ;if (Primes[p]*q > ansp * ansq) ansp = Primes[p], ansq = q ; } printf ("%d %d\n", ansp, ansq) ; }return 0 ;}
转载于:https://www.cnblogs.com/lzsz1212/archive/2012/01/07/2315423.html
[恢]hdu 1239相关推荐
- HDU 1239 Calling Extraterrestrial Intelligence Again
题目 http://acm.hdu.edu.cn/showproblem.php?pid=1239 Problem Description A message from humans to extra ...
- [恢]hdu 2015
2011-12-14 05:49:09 地址:http://acm.hdu.edu.cn/showproblem.php?pid=2015 题意:中文,忒麻烦了. 代码: # include < ...
- [恢]hdu 2014
2011-12-12 05:46:08 地址:http://acm.hdu.edu.cn/showproblem.php?pid=2014 题意:中文题. mark:wa了3次!!!因为敲错变量!!! ...
- [恢]hdu 1412
2011-12-20 14:46:51 地址:http://acm.hdu.edu.cn/showproblem.php?pid=1412 题意:中文. 代码: # include <stdio ...
- [恢]hdu 2098
2011-12-16 04:54:26 地址:http://acm.hdu.edu.cn/showproblem.php?pid=2098 题意:中文,水.直接爆. 代码: # include < ...
- [恢]hdu 1259
2011-12-17 06:39:22 地址:http://acm.hdu.edu.cn/showproblem.php?pid=1259 题意:中文.水题,直接模拟. 代码: # include & ...
- [恢]hdu 2524
2011-12-14 05:20:24 地址:http://acm.hdu.edu.cn/showproblem.php?pid=2524 题意:中文. mark:有意思.2个维度分开考虑,结果相乘, ...
- [恢]hdu 1028
2011-12-16 08:28:00 地址:http://acm.hdu.edu.cn/showproblem.php?pid=1028 题意:一个整数n,可以表示为多少种和的形式. mark:dp ...
- [恢]hdu 1279
2011-12-20 05:17:41 地址:http://acm.hdu.edu.cn/showproblem.php?pid=1279 题意:中文.没啥好说的. 代码: # include < ...
最新文章
- R语言ggplot2可视化:在可视化结果图的四个角落(左上、左下、右上、右下)添加标签实战
- spring注入私有字段_Spring字段依赖注入示例
- 五. 面向对象高级特性4. 接口的概念和使用
- codeforce Gym 100500F 	Door Lock (二分)
- ug建模文本怎么竖着_UG建模知乎答疑练习小集锦
- 配置Mysql实现主从复制与读写分离
- js获取数组中最大和最小值
- SAP License:SAP Solution Manager中的常用命令
- ACR122U Android端应用开发入道指南
- 机器学习算法工程师面试问题汇总(持续更新)
- Office EXCEL 创建图片超链接打不开怎么办 Excel打开图片提示发生了意外错误怎么办
- 如何查看电脑操作系统及系统类型
- python3 接入IOS推送apn
- el-table 跨行/跨列 的写法
- matlab回归分析sst_线性回归(2)—— 模型评估
- Py之pyod:pyod的简介、安装、使用方法之详细攻略
- dft变换的两幅图_图片DFT变换
- python soap服务_Python SOAP服务器/客户端
- Objective-C语法之Category的使用
- unit 5 句子的要素及种类
热门文章
- oracle外键有什么用,深入理解Oracle索引(20):外键是否应该加索引
- 三个球A,B,C大小形状相同,且其中有一个球与其他球的重量不同,要求找出这个不一样的球
- 实验一熟悉matlab环境,数字信号处理报告实验一:熟悉MATLAB环境.doc
- vcm服务器如何修改端口,VCM2000是迈普协同通信解决方案的网管服务器.doc
- leecode62 不同路径
- redis——实战关注
- C语言: const关键字与指针
- online游戏服务器架构—用户登录数据组织 .
- 数学建模 层次分析法
- 人最重要的能力是什么?