杯子
时间限制:1秒 内存限制:256M
【问题描述】
小明买了 \(N\) 个容积可以是无穷大的杯子,刚开始的时候每个杯子里有 1 升水,接着小明发现杯子实在太多了,于是他决定保留不超过 \(K\) 个杯子。每次他选择两个当前含水量相等的杯子,把一个杯子的水全部倒进另一个里,然后把空瓶丢弃。(不能丢弃有水的杯子)
显然在有些情况下小明无法达到他的目标。此时小明会重新买一些新的杯子(新杯子容积无限,开始时有 1 升水),以达到目标。
现在小明想知道,最少需要买多少个新杯子才能达到目标呢?
【输入格式】
只有一行,包含两个正整数:\(N,K\),它们的意义如题目描述。
【输出格式】
只有一行,包含一个非负整数,表示最少需要买多少新杯子。
【输入输出样例1】
Input
3 1
Output
1
【输入输出样例1说明】
有3个1升水的杯子,最后要保留1个杯子。
买入1个新杯子后,有4个杯子,然后两两一组分成2组,每组的2个杯子都可以合成一个杯子,甩掉一个杯子,剩下2个2升水的杯子,再把它门合并成一个4升水的杯子即可达到目标。
【输入输出样例2】
Input
13 2
Output
3
【输入输出样例2说明】
有13个1升水的杯子,最后要保留2个杯子。
买入3个新杯子后,有16个杯子,然后两两一组分成8组,每组的2个杯子都可以合成一个杯子,甩掉一个杯子,剩下8个2升水的杯子;再把8个杯子分成4组,合并后剩下4个4升水的杯子;最后把4个杯子两两分成2组,合并后剩下2个8升水的杯子,达到目标。
【输入输出样例3】
Input
1000000 5
Output
15808
【数据说明】
对于 \(50\%\) 的数据,\(1 ≤ N ≤10^7\)
对于 \(100\%\) 的数据,\(1 ≤ N ≤10^9\),\(K ≤1000\)
【来源】
Mr.he