uva 136(Ugly Numbers, 优先队列基础)
来源:互联网 发布:书林文学软件下载 编辑:程序博客网 时间:2024/05/17 07:02
题目大意:
丑数是指不能被2, 3, 5以外的其他素数整除的数。把丑数从小到大排列起来,结果如下:
1, 2, 3, 4, 5, 6, 9, 10, 12, 15.......
求第15000个丑数的值;
题目分析:
从小到大生成丑数,怎么生成呢,设x是丑数,2*x, 3*x, 5*x依然是丑数, 因为1是丑数,所以我们可以通过2*x, 3*x, 5*x得到所有的丑数;证明呢, 可以通过素数分解证明吧(我不是很清楚)
怎么依次得到丑数呢? 将所生成的丑数加入到优先队列中(注意一个丑数可能有不同的生成方法,需要判重);
参考代码:
#include <cstdio>#include <cstring>#include <algorithm>#include <queue>#include <set>using namespace std;typedef long long LL;set<LL> s;priority_queue<LL, vector<LL>, greater<LL> > pq;int mul[3] = {2, 3, 5};void Init(){ while(!pq.empty()) pq.pop(); s.clear();}int main(){ Init(); pq.push(1); s.insert(1); for(int i = 1; ; i++){ LL x = pq.top(); pq.pop(); if(i == 1500){ printf("The 1500'th ugly number is %lld.\n", x); break; } LL mx; for(int i = 0; i < 3; ++i){ mx = x*mul[i]; if(!s.count(mx)){ s.insert(mx); pq.push(mx); } } } return 0;}
0 0
- uva 136(Ugly Numbers, 优先队列基础)
- UVa 136 Ugly Numbers(优先队列)
- UVA - 136 Ugly Numbers set+优先队列
- Uva 136 Ugly Numbers 优先队列
- Ugly Numbers(UVa 136)优先队列
- UVA.136 Ugly Numbers (优先队列)
- UVA 136 - Ugly Numbers【巧用优先队列】
- UVa - 136 - Ugly Numbers(STL - 优先队列priority_queue)
- UVA-136 Ugly Numbers (map容器+优先队列)
- UVa-136-Ugly Number STL 优先队列的基础使用
- uvaoj 136 Ugly Numbers 优先队列使用
- UVA 136 Ugly Numbers(队列)
- UVA 136 Ugly Number(优先队列)
- 例题5-7 UVA 136 Ugly Numbers丑数(set+优先队列)
- UVa 136 - Ugly Numbers
- UVa 136 - Ugly Numbers
- UVa 136 - Ugly Numbers
- UVA - 136 Ugly Numbers
- Android Studio JNI NDK编程(一)
- Android应用开发Camera系列(一):SurfaceView实现相机预览demo--新手上路
- 用NetBeans制作表格并实现增删改功能
- 安卓著名博客
- int * * a[10] int * (*a)[10]和 int(*a[10])() 是什么意思
- uva 136(Ugly Numbers, 优先队列基础)
- Linux用户空间与内核空间
- 浅谈搜索引擎优化方法
- iOS 锚点使用说明
- objective-c一个简单的异步下载的封装
- linux学习与实战:https://www.shiyanlou.com (不需要你有linux机子, 也不需要安装linux虚拟机)
- 调用堆栈提示用法
- sqlserver2008远程过程调用失败, 错误代码[0x800706be]
- 机器学习(二)--- 分类算法详解