题目连接
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;
}