题目描述
时间限制:1s 空间限制:512M
题目描述:
大数学家高斯小时候偶然间发现一种有趣的自然数集合 B,对于以 a 为基的集合 B 定义如下:
- a 是集合 B 的基,且 a 是 B 的第一个元素;
- 如果 x 在集合 B 中,则2x+1 和3x+1 也都在集合 B 中;
- 没有其他元素在集合 B 中了。
现在小高斯想知道如果将集合 �B 中元素按照升序排列,第 �n 个元素会是多少?
输入格式:
输入若干行,每行输入包括两个数字,集合的基 (1≤a≤50) 以及所求元素序号 (1≤n≤1000000)
输出格式:
对于每个输入,输出集合 �B 的第 �n 个元素值,以单个空格隔开。
样例输入:
1 100 28 5437
样例输出:
418 900585
code:
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int main(){
unsigned long long n,m;
while(cin>>n>>m){
priority_queue<unsigned long long,vector<unsigned long long>,greater<unsigned long long> > pq;
pq.push(n);
unsigned long long tot=0,now=0;
while(tot<m){
now=pq.top();
pq.pop();
tot++;
pq.push(now*2+1);
pq.push(now*3+1);
}
cout<<now<<' ';
}
}