UVa136 Ugly Numbers (STL)

链接:http://acm.hust.edu.cn/vjudge/problem/19437分析:priority_queue的应用。丑数指不能被2,3,5以外的其它素数整除的数,最小的丑数是1(1不是素数),然后对于每个丑数x,2x,3x,5x也是丑数,所以就从小到大生成每个丑数保存在优先队列里,每次取队列中最小的丑数扩展,注意生成新的丑数时还需判断之前是否已经生成过,这里用set就可以保存生成过的所有丑数。
 1 #include <iostream>
 2 #include <queue>
 3 #include <set>
 4 #include <vector>
 5 using namespace std;
 6
 7 typedef long long LL;
 8 const int coeff[3] = {2, 3, 5};
 9
10 int main() {
11     priority_queue<int, vector<LL>, greater<LL> > pq;
12     set<LL> s;
13     pq.push(1);
14     s.insert(1);
15     for (int i = 1; ; i++) {
16         LL x = pq.top(); pq.pop();
17         if (i == 1500) {
18             cout << "The 1500‘th ugly number is " << x << ".\n";
19             break;
20         }
21         for (int j = 0; j < 3; j++) {
22             LL x2 = x * coeff[j];
23             if (!s.count(x2)) { s.insert(x2); pq.push(x2); }
24         }
25     }
26     return 0;
27 }
时间: 2024-12-20 18:49:49

UVa136 Ugly Numbers (STL)的相关文章

UVA136 Ugly Numbers

问题链接:UVA136 Ugly Numbers.基础级练习题,用C++语言编写程序. 题意简述:不能被2.3和5以外的素数整除的数称为丑数,找出第1500个丑数. 问题分析:换句话说,丑数的因子只能是2.3和5.1是丑数,对于x,若x是丑数则2x.3x和5x是丑数.利用已知的丑数,从小到不断生成丑数就可以了. 程序中,使用一个STL的容器set来存放丑数.集合具有去重复,自动排序的功能,对于解决本问题是方便的. AC的C++语言程序如下: /* UVA136 Ugly Numbers */ #

【优先队列基础练习】POJ1338 Uva136 - Ugly Numbers题解

昨天夜里学了栈.队列和优先队列,栈还有的地方不大懂,队列基本可以,优先队列很高兴.本想今天上午继续弄这个,但是跟着李晨他们一块听了清华交院罗雨屏老师讲的计算几何= =虽然以我的水平听计算几何有点早,但至少是听懂了很多,感觉很高兴:十点多就没有再听,毕竟之后越来越深亚历山大.于是就来写一下丑数的题解. 题目:除2,3,5外不能被其他素数整除的数为丑数,求第1500个丑数(Uva版),求第n(n<=1500)个丑数(POJ版) 思路:第一个是1,放入升序优先队列(小的先出),之后每次出队第一个元素,

UVA - 136 Ugly Numbers(丑数,STL优先队列+set)

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 Ther

UVa 136 Ugly Numbers(优先队列)

题意  质因数只可能有2,3,5的数称为丑数  输出第1500个丑数 STL优队列应用  1是丑数 丑数的2,3,5倍都是丑数  用优先队列模拟就行了 #include <cstdio> #include <cstring> #include <set> #include <queue> using namespace std; typedef long long ll; //priority_queue<ll, vector<ll>, g

UVA 136 &amp; POJ1338 Ugly Numbers

题目大意: 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, - shows the first 10 ugly numbers. By convention, 1 is included. 把只含有2.3.5因数的数称为丑数,默认第一个丑数是1. POJ是有多次询问,输出第n个丑数 UVA是询问第1500个丑数是多少. 思路:

POJ1338 Ugly Numbers

问题链接:POJ1338 Ugly Numbers.基础级练习题,用C++语言编写程序. 题意简述:不能被2.3和5以外的素数整除的数称为丑数,找出第1500个丑数. 问题分析:换句话说,丑数的因子只能是2.3和5.1是丑数,对于x,若x是丑数则2x.3x和5x是丑数.利用已知的丑数,从小到不断生成丑数就可以了. 程序中,使用一个STL的容器set来存放丑数.集合具有去重复,自动排序的功能,对于解决本问题是方便的.但是,set对象无法用下标访问,所以倒腾到vector对象中再使用.本问题打表是合

poj 1338 Ugly Numbers

Ugly Numbers Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 21315   Accepted: 9520 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, ... shows the first 10 ugly num

NYOJ1097 Ugly Numbers 【丑数】

Ugly Numbers 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 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. Now give you need

Ugly Numbers(1.5.8)

Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64 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, ... shows the first 10 ugly numbers. By convention,