oj1026: 丑数(优先队列以及寻找最优解)

该博客探讨了如何使用优先队列来解决寻找丑数的问题。丑数是指只包含质因数2, 3, 5, 7的整数。作者通过示例解释了如何从最小丑数开始,利用优先队列生成并去除重复的下一个丑数。此外,还提及了一种更优的解决方案,即通过寻找最优解的方式确定每个丑数,避免了重复计算。" 70229263,5733139,CAD数据与卫星图像套合配准教程,"['GIS', '数据处理', '地理信息系统', '坐标转换', '遥感']
摘要由CSDN通过智能技术生成

题目要求
丑数就是这个数的质因子只有2,3,5,7这四个,除此之外不再含有其它
别的质因子。

注意1也被认为是丑数.丑数的前20个为
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, … ;
Input
每行输入一个N,1 <= N <= 5842,N为0时输入结束.
Output
输出相应的第N个丑数.
Sample Input
Raw
1
2
3
4
11
12
13
21
22
23
100
1000
5842
0
Sample Output
Raw
1
2
3
4
12
14
15
28
30
32
450
385875
2000000000
这道题在以前,只会常规遍历寻找数字是否整除等于0时,总是显示超时。最近看到了vector,set,map以及优先队列又想起来了。
第一遍做的时候很单纯,丑数是2,3,5,7的倍数,只要从最小的丑数1开始,用一个优先队列保持所有已生成的丑数,每次取出最小的那个数字让它乘上2,3,5,7自然可以得到下一个丑数,因为是优先队列,可以使它从小到大直接排列,要注意的使这样做会出现重复数字,所以要记得去重。最后只要知道所给数字,即可知道该位置上的丑数了。
完整代码

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<math.h>
#include<set>
#include<queue>

using namespace std;
typedef long long LL;
const int num[4]={
   2,3,5,7
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值