题目
丑数指不能被2,3,5整除的数。求生粗排列的第1500个丑数
预备知识:
set对象的insert()不去重,count()可以统计出现次数
代码:
#include <iostream> #include<vector> #include<queue> #include<set> using namespace std; typedef long long LL;//定义一个longlong类型的数LL const int coeff[3] = { 2,3,5 }; int main() { priority_queue<LL, vector<LL>, greater<LL> >pq;//升序放无重复的丑数 set<LL> s;//s用来判断这个丑数有没有出现过。注意set的insert()不去重,count()可以统计出现次数 pq.push(1);//最小的丑数是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); } } } return 0; }