#P0202. C.Popcount 和 3(popcount)

C.Popcount 和 3(popcount)

当前没有测试数据。

题目描述

给定正整数 NNKK

请你求出所有满足以下条件的正整数 xx 的和,并对 998244353998244353 取模:

  • 1xN1 \le x \le N
  • popcount(x)=K\operatorname{popcount}(x) = K

共有 TT 组测试数据,你需要对每组数据分别求解。


什么是 popcount?

对于一个正整数 yypopcount(y)\operatorname{popcount}(y) 表示它的二进制表示中 1 的个数。

例如:

  • popcount(5)=2\operatorname{popcount}(5)=2,因为 55 的二进制是 101
  • popcount(16)=1\operatorname{popcount}(16)=1,因为 1616 的二进制是 10000
  • popcount(25)=3\operatorname{popcount}(25)=3,因为 2525 的二进制是 11001

输入格式

第一行一个整数 TT,表示测试数据组数。

接下来 TT 行,每行两个整数:

N K

表示一组测试数据。


输出格式

输出 TT 行。

ii 行输出第 ii 组测试数据的答案,即所有满足条件的正整数之和对 998244353998244353 取模后的结果。


输入输出样例

样例输入

2
20 2
1234567890 17

样例输出

100
382730918

样例解释

对于第一组数据,所有不超过 2020popcount(x)=2\operatorname{popcount}(x)=2 的正整数共有 99 个:

3,5,6,9,10,12,17,18,203,5,6,9,10,12,17,18,20

它们的和为:

3+5+6+9+10+12+17+18+20=1003+5+6+9+10+12+17+18+20 = 100

由于 100mod998244353=100100 \bmod 998244353 = 100,所以第一行输出 100

注意答案需要对 998244353998244353 取模。


数据范围

  • 1T1001 \le T \le 100
  • 1N<2601 \le N < 2^{60}
  • 1K601 \le K \le 60

保证输入的 T,N,KT,N,K 均为整数。