问题描述
考虑经典的约瑟夫环模型:n个人按顺序围成一圈,从第一个人开始报数,从1开始报,报到k这个数的人会被移出去,然后下一个人从1开始重新报数,第n个人报完数之后第1个人接着报数,问整个过程中第1个人报了几次数
注意n用long long存
输入数据要求
两个正整数n,k 1<=n<=1000000000000000000 1<=k<=200
输出数据
第1个人被移除之前一共报了几次数
样例输入
4 4
输出结果
3
代码
// An highlighted block
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
long long n, k, cur_number, res, temp;
int main() {
cin >> n >> k;
res = 1;
cur_number = 1;
while (cur_number != 0) {
temp = n + cur_number;
n -= temp / k;
cur_number = temp % k;
res++;
}
cout << res << endl;
return 0;
}