首页 > 代码库 > 丑数 uva-136 丑数

丑数 uva-136 丑数

代码如下:

/*丑数是指不能被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;
}

*/


 

丑数 uva-136 丑数