您的位置:首页 > 其它

Uva136 丑数[优先队列]

2016-07-30 22:48 309 查看

题目连接

http://acm.hust.edu.cn/vjudge/problem/19437

题意

找出第1500个素因子只能有2或3或5的数。

题解

懵逼了吧,并不是素因子筛,用2,3,5去筛并不能得到满足丑数要求的数,例如14就筛不掉。优先队列每次取一个最小的数x,2x,3x,5x,都是丑数,但是每次要判断是否有重数(set),取1500,每次都是取出最小的数,取1500次之后就是第1500个数。

代码

#include<bits/stdc++.h>
int b[3]={2,3,5};
using namespace std;

int main()
{
set<long long>s;
priority_queue<long long,vector<long long>,greater<long long> >que;
que.push(1);
s.insert(1);
int k;
for(k=1;;k++)
{   if(k==1500){printf("The 1500'th ugly number is %lld.\n",que.top());return 0;}
long long cnt=que.top();
que.pop();
for(int i=0;i<=2;i++)
{
long long z=cnt*(long long)b[i];

if(!s.count(z)){s.insert(z);que.push(z);}
}
}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: