#include<bits/stdc++.h>
using namespace std;
#define cl(a,b) memset(a,b,sizeof(a))
#define fastIO ios::sync_with_stdio(false);cin.tie(0);
#define LL long long
#define pb push_back
#define gcd __gcd
#define For(i,j,k) for(int i=(j);i<k;i++)
#define lowbit(i) (i&(-i))
#define _(x) printf("%d\n",x)
const double EPS = 1e-8;
const int maxn = 1e6+10;
const int inf = 1 << 28;
/*
约瑟夫问题
可以解决n很大的
*/
int solve(int n,int k){
if(n==1)return 0;
if(n<k){
int ret = 0;
for(int i=2;i<=n;i++)ret = (ret+k) % i;
return ret;
}
int ret = solve(n-n/k,k);
if(ret < n%k){
ret = ret - n % k + n;
}
else {
ret = ret - n % k + (ret - n % k) / (k - 1);
}
return ret;
}
int main(){
int T;scanf("%d",&T);
while(T--){
int n,k;
scanf("%d%d",&n,&k);
printf("%d\n",solve(n,k));
}
return 0;
}
HIHO #1296 : 数论三·约瑟夫问题
最新推荐文章于 2016-08-27 12:59:26 发布