标签:uva
题意:
不能被2,3,5以外的素数整除的数,称为丑数;找出第1500个丑数;
思路:
用优先队列和map判重;
如果x是丑数,则2x,3x,5x都是丑数;
不停的放出优先队列;
并取出队头(最小的数)x;
要判断这个数是否已经访问过;
找到第1500个输出;
#include<cstdio> #include<cstring> #include<queue> #include<vector> #include<map> #define ll long long using namespace std; priority_queue<ll , vector<ll> , greater<ll> > q; map<ll ,int> m; int main() { q.push(1); m[1] = 1; int count = 0; while(1) { ll t = q.top(); q.pop(); count++; if(count == 1500) { printf("The 1500'th ugly number is %lld.\n",t); break; } if(!m[t * 2]) { m[t * 2] = 1; q.push(t * 2); } if(!m[t * 3]) { m[t * 3] = 1; q.push(t * 3); } if(!m[t * 5]) { m[t * 5] = 1; q.push(t * 5); } } return 0; }
标签:uva
原文地址:http://blog.csdn.net/yeyeyeguoguo/article/details/44784811