HDU 5878 -- 丑数打表(2016 ACM/ICPC Asia Regional Qingdao Online)

题目要求找到大于输入n且因子仅包含2,3,5,7的最小数。暴力搜索会超时,通过丑数打表和二分查找能有效解决。丑数是只由2,3,5,7因子组成的数。建立丑数表,从1开始,每个丑数是前一个丑数乘以2,3,5,7的最小值。给出的代码枚举了5842个丑数,最后一个已达到2的9次方。" 112024010,8455081,Cryptol环境配置全攻略,"['编程语言', ' Cryptol', '环境配置', '软件安装', '求解器安装']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=5878


题意:输入一个n,要求找出比n大的,因子只有2,3,5,7的最小的数。


题解:首先说一下什么是丑数,因子只有2,3,5,7的数就是丑数。。。。然后,该怎么做呢?肯定不能从n开始,一个一个暴力找,从题目的样例来看,当n是10的9次方时,要找两万多遍,会超时。如果做过丑数相关的题的话,就会知道其实10的9次方个数里面,丑数其实不多,可以直接打表,然后通过二分法把离n最近的丑数找出来。怎么打表就是关键了。


首先,第一个丑数为“1”,后面的每一个丑数都是有前一个丑数乘2、3、5或7而来,那么后一个丑数就是前一个乘这四个数得到的最小值,for example:第一个:1,第二个:1*2、1*3、1*5或1*7,显然为2,第三个:2*2,1*3,1*5或1*7,显然是3,第四个:2*2,,2*3,1*5,1*7为4,第五个:3*2,2*3,1*5,1*7…… 


以下代码枚举了5842个丑数,从小到大存在a数组里面,输出一下第5842个丑数,发现已经是2*10的9次方了

#include <iostream>  
#include <cstdio>  
#define min
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值