zoukankan      html  css  js  c++  java
  • poj---1338---Ugly Numbers

    http://poj.org/problem?id=1338

    Time Limit: 1000MS   Memory Limit: 10000K
    Total Submissions: 22968   Accepted: 10218

    Description

    Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence  1, 2, 3, 4, 5, 6, 8, 9, 10, 12, ...  shows the first 10 ugly numbers. By convention, 1 is included.  Given the integer n,write a program to find and print the n'th ugly number. 

    Input

    Each line of the input contains a postisive integer n (n <= 1500).Input is terminated by a line with n=0.

    Output

    For each line, output the n’th ugly number .:Don’t deal with the line with n=0.

    Sample Input

    1
    2
    9
    0
    

    Sample Output

    1
    2
    10
    

    Source

     
    丑数的定义:一个数的素因数只有2, 3,或5.
    因此只有这三个数来回的做乘法,按顺序存起来就OL!
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <cmath>
    #include<queue>
    #include<stack>
    #include<algorithm>
    using namespace std;
    
    const int maxn=1502;
    const int INF=0x3f3f3f3f;
    
    int ugly[maxn]= {0, 1};
    
    
    void Init()
    {
        int num2=2, num3=3, num5=5;
        int i, j, k, t;
        i=j=k=1;
    
        for(int x=2; x<maxn; x++)
        {
            t=min(num2, min(num3, num5));
            ugly[x]=t;
    
            if(t==num2)
                num2=ugly[++i]*2;
    
            if(t==num3)
                num3=ugly[++j]*3;
    
            if(t==num5)
                num5=ugly[++k]*5;
        }
    }
    int main()
    {
        Init();
        int n;
    
        while(scanf("%d", &n), n)
            printf("%d
    ", ugly[n]);
        return 0;
    }
    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<math.h>
    #include<queue>
    #include<set>
    #include<map>
    #include<algorithm>
    typedef long long LL;
    using namespace std;
    const int maxn=10010;
    const int INF=0x3f3f3f3f;
    const int ugly[3]={2, 3, 5};
    LL a[maxn];
    void init()
    {
        priority_queue<LL, vector<LL>, greater<LL> >Q;
        set<LL> s;
        Q.push(1);
        s.insert(1);
        int k=1;
        for(int i=1; ; i++)
        {
            LL x=Q.top();
            Q.pop();
            a[k++]=x;
            if(i==1520)
                break;
            for(int j=0; j<3; j++)
            {
                LL t=x*ugly[j];
                if(!s.count(t))
                {
                    s.insert(t);
                    Q.push(t);
                }
            }
        }
    }
    int main()
    {
        init();
        int n;
        while(scanf("%d", &n), n)
        {
            printf("%lld
    ", a[n]);
        }
        return 0;
    }
  • 相关阅读:
    树链剖分学习笔记
    [bzoj4445] [SCOI2015]小凸想跑步 (半平面交)
    上下界网络流学习笔记
    LocalMaxima_NOI导刊2009提高(1)(欧拉-马斯刻若尼常数)
    公告
    构造函数
    矩阵线段树
    [SCOI2005]互不侵犯
    牛客网NOIP赛前集训营-提高组(第四场)B区间
    noip提高组模拟赛(QBXT)T2
  • 原文地址:https://www.cnblogs.com/w-y-1/p/5752065.html
Copyright © 2011-2022 走看看