#66. 国王游戏 1

国王游戏 1

问题描述

恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏。首先,他让大臣们围成一圈,然后按顺时针方向给大臣依次编号为 1 、2、……、n 号。接下来,一轮游戏开始:按顺时针方向,从 1 号大臣开始报数,报到 m 的大臣暂时出局;再从刚暂时出局大臣的顺时针方向下一个还在圈里的大臣开始重新报数,报到 m 的大臣暂时出局……如此重复,直至剩下一个大臣,该轮游戏结束。假设最后剩下大臣的编号为 k,则刚刚暂时出局的大臣中,所有编号大于 k 的大臣将每人获得 1 个金币,然后永久出局。所有编号小于 k 的大臣将回到原位,开始新一轮的游戏。

若干轮游戏之后,将不再有大臣永久出局,此时游戏结束,所有剩下的大臣将每人获得 2 个金币。

国王想知道,最终他需要支付多少个金币?

输入

一行,包含两个整数 n, m

输出

一行,包含一个整数,表示国王需要支付的金币个数。

样例1输入

5 2

样例1输出

8

样例1解释

共有 5 个大臣。

第一轮:依次暂时出局的大臣编号是 2、4、1、5,最后剩下 3 号,则 4、5 号大臣每人获得 1 个金币,永久出局;

第二轮:圈里剩下的大臣为 1、2、3 号,依次暂时出局的大臣编号是 2、1,最后剩下 3 号,没有大臣永久出局。剩下的 3 个大臣每人获得 2 个金币。

国王一共需要支付 2×1+3×2=8 个金币。

样例2输入

7654321 1234

样例2输出

7654331

数据范围

共 10 个测试点,具体如下:

测试点 1:n ≤ 10^3, m = 2

测试点 2:n ≤ 10^3, m ≤ 10^3

测试点 3:n ≤ 10^5, m =2

测试点 4:n ≤ 10^5, m ≤ 10^5

测试点 5:n ≤ 10^7, m = 2

测试点 6-7:n ≤ 10^7, m ≤ 10^7

测试点 8-10:n ≤ 5×10^7, m ≤ 5×10^7