算法习题---5.7丑数(Uva136)
一:题目
丑数是指不能被除了2,3,5以外的素数整除的数。将丑数从小到大排序 1,2,3,4,5,6,8,9,10,12,15,.... 求第1500个丑数
(一)求解方法
对于任意丑数x,他的2x,3x,5x都是丑数。
二:代码实现
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <set> #include <vector> #include <queue> #include <functional> using namespace std; typedef long long LL; const int factor[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) //如果出栈的是第1500个,则直接输出 { cout << x; break; } for (int j = 0; j < 3; j++) { LL x2 = x*factor[j]; if (!s.count(x2)) //如果不是重复的数,则插入到集合和优先队列 { s.insert(x2); pq.push(x2); } } } system("pause"); return 0; }