UVA1363 约瑟夫的数论问题 Joseph's Problem
题目描述
Joseph 喜欢参加程序设计竞赛。他最喜欢的问题当然是 Joseph 问题。其表述如下:
> 有 $n$ 个人,按 $0$ 到 $n - 1$ 的顺序编号,围成一圈。编号为 $k$ 的人(从编号为 $0$ 的人开始计数)被处决。之后,从上一个被处决者的下一个人开始计数,在剩余的人中编号为 $k$ 的人被处决。该过程一直持续,直到只剩下一个人为止。这个人就是幸存者。问题是:给定 $n$ 和 $k$,求出在原始圆圈中幸存者的编号。
当然,你们都知道如何解决这个问题。解法非常简短,你只需要一个循环:
$\begin{aligned} &\quad\verb!r := 0;! \\[-1mm] &\quad\verb!for i from 1 to n do! \\[-1mm] &\quad\verb! r := (r + k) mod i;! \\[-1mm] &\quad\verb!return r;! \end{aligned}$
这里的 $\verb!x mod y!$ 表示 $x$ 除以 $y$ 的余数。
但是 Joseph 并不是很聪明。他学会了算法本身,却没有学会背后的推理。因此他已经忘记了算法的细节,只是大概还记得答案是怎么求的。
他把这个问题告诉了他的朋友 Andrew,但却声称可以用下面的算法来求解:
$\begin{aligned} &\quad\verb!r := 0;! \\[-1mm] &\quad\verb!for i from 1 to n do! \\[-1mm] &\quad\verb! r := r + (k mod i);! \\[-1mm] &\quad\verb!return r;! \end{aligned}$
当然,Andrew 指出了 Joseph 是错的。不过,计算 Joseph 所描述的那个函数也同样很有意思。
给出 $n, k$,求出 $\sum _ {i = 1} ^ n (k \bmod i)$。
输入格式
输入文件包含多组测试数据,每组数据由一行 $n, k$($1 \le n, k \le 10 ^ 9$)组成。
输出格式
对于每组数据,输出一行表示要求的和。