Special Numbers 进制(1100)

在这里插入图片描述
题意 :

  • 写出从小到大第k个满足以下性质的数 :对于给定的n,可以分为若干个不同的n的幂次的和

思路 :

  • 根据题意,这些数是在n进制下,每一位只能取0或者1(出现1次和不出现)的数,考虑将这些数排列,所以从小到大分别是 1,10,11,100,101
  • 所以只需要先用二进制写出k,然后再用n进制解读它即可
#include <iostream>

using namespace std;

typedef long long ll;

const ll mod = 1e9 + 7;

int main()
{
    
    
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    
    int _;
    cin >> _;
    
    while (_ -- )
    {
    
    
        ll n, k;
        cin >> n >> k;
        
        ll t = 1, ans = 0;
        
        while (k)
        {
    
    
            if (k & 1) ans = (ans + t) % mod;
            t = t * n % mod;
            k >>= 1;
        }
        
        cout << ans << endl;
    }
    
    return 0;
}

猜你喜欢

转载自blog.csdn.net/m0_51448653/article/details/121447547