查询数集 题目ID:9601 90pts qt!

题目描述

时间限制: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<<' ';
    }
}
1 个赞

不能有重复数字!!

3 个赞

谢谢,已过

1 个赞