洛谷——P1748 H数

P1748 H数

题目描述

所谓H数,是指只含有2,3,5,7这些质因数的数,如630是H数,而22不是。现在要求输出第n个H数,为了方便起见将H[1]定为1。已知n不超过10000,最后数据在int64范围之内。

维护一个单调队列或是一个set集合(自带去重)

//维护四个指针,每次取最小值
#include<iostream> #include<cstdio> #include<cmath> #include<set> #define N 10005 using namespace std; int n; long long h[N],a=1,b=1,c=1,d=1; int main() { scanf("%d",&n); h[1]=1; for(int i=2;i<=n;i++){ h[i]=h[a]*2; if(h[i]>h[b]*3) h[i]=h[b]*3; if(h[i]>h[c]*5) h[i]=h[c]*5; if(h[i]>h[d]*7) h[i]=h[d]*7; if(h[i]==h[a]*2) ++a; if(h[i]==h[b]*3) ++b; if(h[i]==h[c]*5) ++c; if(h[i]==h[d]*7) ++d; } printf("%lld\n",h[n]); return 0; }
#include<iostream>
#include<cstdio>
#include<cmath>
#include<set>

using namespace std;

int n;
set<long long>S;
int main()
{
    scanf("%d",&n);
    S.insert(1);
    set<long long>:: iterator it=S.begin();
    for(int i=1;i<n;i++){
        long long x=*it;
        S.insert(x*2);
        S.insert(x*3);
        S.insert(x*5);
        S.insert(x*7);
        it++;
    }
    if(!n) printf("0\n");
    else printf("%lld\n",*it);
    
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/song-/p/9722548.html