所谓 H 数,是指只含有 2,3,5,7 这些质因数的数,如 630 是 H 数,而 22 不是。现在要求输出第 n 个 H 数,为了方便起见将 H[1] 定为 1。已知 1≤n≤10000,最后数据在int64 范围之内。
输入
一个数 n(如题目)
输出
第 n 个 H 数
样例输入 Copy
30
样例输出 Copy
49
提示
input2:
1
output2:
1
Hint
穷举会爆掉,要用生成法,最好加优化,不然空间复杂度比较大
#include<bits/stdc++.h>
using namespace std;
long long n,t;
int main()
{
priority_queue <long long,vector<long long>,greater<long long> > q;
cin>>n;
q.push(1);
for(int i=1;i<n;i++)
{
t=q.top();
q.push(t*2);
q.push(t*3);
q.push(t*5);
q.push(t*7);
while(q.top()==t) q.pop();
}
cout<<q.top();
return 0;
}