#P2800. Joseph's Problem

Joseph's Problem

题目描述

Joseph 喜欢参加编程竞赛。他最喜欢的问题当然是 Joseph问题

问题描述如下:

nn 个人围成一圈,编号从 00n1n - 1。从编号为 00 的人开始计数,数到第 kk 个人时将其淘汰。接着从被淘汰者的下一个人开始重新计数,再次数到第 kk 个人时淘汰。重复这一过程,直到只剩下一人,此人即为幸存者。问题的目标是,给定 nnkk,找出原始圆圈中幸存者的编号。

当然,你们都知道如何解决这个问题。解法非常简短,只需一个循环:

</p>

r := 0;

for i from 1 to n do

r := (r + k) mod i;

return r;

其中 xmodyx \bmod y 表示 xx 除以 yy 的余数。但 Joseph 并不聪明。他学会了算法,但没理解背后的原理,因此忘记了算法的细节,只记得近似解法。

他告诉朋友 Andrew 这个问题,但声称可以用以下算法解决:

r := 0;

for i from 1 to n do

r := r + (k mod i);

return r;

当然,Andrew 指出 Joseph 是错误的。但计算 Joseph 描述的这个函数也很有趣。

给定 nnkk,计算 1in(kmodi)\sum_{1 \leq i \leq n} (k \bmod i)

输入

输入文件包含 nnkk1n,k1091 \leq n, k \leq 10^9)。

输出

输出所求的和。

输入样例 1

5 3

输出样例 1

7

题目来源

Northeastern Europe 2005