代码如下:
/*丑数是指不能被2、3、5以外的其他素数整除的数,把丑数从小到大排列起来,结果如下:
1,2,3,4,5,6,8,9,10,12,15...
求出第1500个丑数。
*/
#include<iostream>
#include<vector>
#include<queue>
#include<set>
using namespace std;
typedef long long LL;
int su[3]={2,3,5};
int main()
{
priority_queue<LL,vector<LL>,greater<LL> >Q;//定义优先队列,数越小的优先级越高!
set<LL>S;
Q.push(1);
S.insert(1);
for(int i=1;;i++)
{
LL now=Q.top();
Q.pop();
if(i==1500)
{
cout<<"第1500个素数的值为:"<<now<<endl;
break;
}
for(int ii=0;ii<3;ii++)
{
LL num=su[ii]*now;
if(!S.count(num))
{
S.insert(num);
Q.push(num);
}
}
}
return 0;
}
/*
如果有时候用数组来标记很大的数会造成程序无法运行,
因为数组能开的长度有限,表示的数不全面,
此时可以考虑使用集合 set !!!
比如说:set <long long>S;
*/
/*
#include<iostream>
#include<set>
using namespace std;
int main()
{
set<int>Q;
int a[6]={4,1,2,3,4,5};
for(int i=0;i<6;i++)
{
Q.insert(a[i]);
}
cout<<"集合大小为:"<<Q.size()<<endl<<"集合里面所存的元素为:";
for(set<int>::iterator it =Q.begin();it!=Q.end();it++)
cout<<*it<<" ";
cout<<endl;
return 0;
}
*/