#P2800. Joseph's Problem
Joseph's Problem
题目描述
Joseph 喜欢参加编程竞赛。他最喜欢的问题当然是 Joseph问题。
问题描述如下:
有 个人围成一圈,编号从 到 。从编号为 的人开始计数,数到第 个人时将其淘汰。接着从被淘汰者的下一个人开始重新计数,再次数到第 个人时淘汰。重复这一过程,直到只剩下一人,此人即为幸存者。问题的目标是,给定 和 ,找出原始圆圈中幸存者的编号。
当然,你们都知道如何解决这个问题。解法非常简短,只需一个循环:
</p>r := 0;
for i from 1 to n do
r := (r + k) mod i;
return r;
其中 表示 除以 的余数。但 Joseph 并不聪明。他学会了算法,但没理解背后的原理,因此忘记了算法的细节,只记得近似解法。
他告诉朋友 Andrew 这个问题,但声称可以用以下算法解决:
r := 0;
for i from 1 to n do
r := r + (k mod i);
return r;
当然,Andrew 指出 Joseph 是错误的。但计算 Joseph 描述的这个函数也很有趣。
给定 和 ,计算 。
输入
输入文件包含 和 ()。
输出
输出所求的和。
输入样例 1
5 3
输出样例 1
7
题目来源
Northeastern Europe 2005