UVA - 136 Ugly Numbers
2015-10-05 15:46
417 查看
Description
Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence
1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, ...
shows the first 11 ugly numbers. By convention, 1 is included.
Write a program to find and print the 1500'th ugly number.
第一种方法:遍历每个数,判断是否为ugly,直到第1500个ugly为止(简单粗暴,没有效率可言,runtime 19s)
第二种方法:利用STL优先队列从小到大生成各个ugly number。最小的丑数是1,而对于任意丑数x,2x,3x和5x也都是丑数。注意丑数判重。(有点难度,效率高的没话说,runtime 5ms)
Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence
1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, ...
shows the first 11 ugly numbers. By convention, 1 is included.
Write a program to find and print the 1500'th ugly number.
Input and Output
There is no input to this program. Output should consist of a single line as shown below, with <number> replaced by the number computed.Sample output
The 1500'th ugly number is <number>.第一种方法:遍历每个数,判断是否为ugly,直到第1500个ugly为止(简单粗暴,没有效率可言,runtime 19s)
#include <cstdio> using namespace std; int isugly(int n) { while(n>1) { if(n%2==0)n/=2; else if(n%3==0)n/=3; else if(n%5==0)n/=5; else return 0; } return 1; } int main() { int cnt = 1; int number = 2; while(cnt < 1500) { if(isugly(number))cnt++; number++; } printf("%d\n",number-1); return 0; }
第二种方法:利用STL优先队列从小到大生成各个ugly number。最小的丑数是1,而对于任意丑数x,2x,3x和5x也都是丑数。注意丑数判重。(有点难度,效率高的没话说,runtime 5ms)
#include <iostream> #include <vector> #include <queue> #include <set> using namespace std; typedef long long LL; const int coeff[3] = {2, 3, 5}; int main() { priority_queue<LL, vector<LL>, greater<LL> > pq; set<LL> s; pq.push(1); s.insert(1); for(int i=1; ;i++) { LL x = pq.top(); pq.pop(); if(i==1500) { cout << "The 1500'th ugly number is " << x << ".\n"; break; } for(int j=0; j<3; j++) { LL x2 = x*coeff[j]; if(!s.count(x2)){s.insert(x2); pq.push(x2);} } } }
相关文章推荐
- Linux的uio驱动机制的由来和优缺点(一)
- GitHub使用教程
- 曲线拟合优化中矩阵关系(Jacobian )
- 带参带返回值方法的使用
- windows多线程详解
- 「Swift学习笔记」使用UILabel显示多行文本
- 到底怎么做才有用?
- 二叉树的序列化和反序列化
- TinyXml Documentation 翻译 TinyXML Tutorial翻译
- ubuntu下安装和卸载软件和重新制定文本编辑器
- 数字图像处理知识体系小结(转)
- C语言 整人程序“我是猪”
- Bootstrap CSS——Button&Img
- 寻找最大值
- C语言用后序求表达式的结果
- C# : ADO 读取 SQLite
- 百度地图KEY的申请
- UNIX环境高级编程中的apue.h头文件的问题
- 关于JS操作DOM的一些小细节
- 下表法排序