#HT1030. 数字任务

数字任务

题目描述

给你两个整数 m(0m1018)m(0 \le m \le 10^{18})k(1k64)k(1 \le k \le 64),请找出满足如下条件的最小正整数 nn

n+1,n+2,,ann+1,n+2, \ldots, a \cdot n 中恰好有 mm 个整数的二进制表示中有 kk 位为 11

数据保证 nn 必然存在且不超过 101810^{18}

输入格式

输入共一行,包含两个整数 mmkk,以一个空格分隔(0m1018,1k640 \le m \le 10^{18}, 1 \le k \le 64)。

输出格式

输出满足条件的最小正整数 n(1n1018)n(1 \le n \le 10^{18})

样例

1 1
1
3 2
5

样例 1 解释

样例1中,n=1n=1

  • n+1=2=(10)2n+1=2=(10)_2,二进制表示包含 1111,满足条件。

11 个数满足条件。

样例 2 解释

样例2中,n=5n=5

  • 6=(110)26 = (110)_2,二进制表示中包含 2211,满足条件;
  • 7=(111)27 = (111)_2,二进制表示中包含 3311,不满足条件;
  • 8=(1000)28 = (1000)_2,二进制表示中包含 1111,不满足条件;
  • 9=(1001)29 = (1001)_2,二进制表示中包含 2211,满足条件;
  • 10=(1010)210 = (1010)_2,二进制表示中包含 2211,满足条件。

33 个数满足条件。

同样能够证明,当 n=1n=1 时,共 00 个数满足条件;当 n=2n=2 时,共 11 个数满足条件;当 n=3n=3 时,共 22 个数满足条件;当 n=4n=4 时,共 22 个数满足条件,所以 55 是最小的满足条件的答案。

数据范围

  • 对于 20%20\% 的数据,m1000,k10m \le 1000, k \le 10
  • 对于 40%40\% 的数据,m109,k30m \le 10^9, k \le 30
  • 对于 100%100\% 的数据,0m1018,1k640 \le m \le 10^{18}, 1 \le k \le 64