题目链接:https://vjudge.net/contest/330774#problem/K
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll t,n,m,k,carry=1;
ll Fibonacci(ll n,ll m,ll k)
{
ll ans=(k-1)%(n-m+1)+1;
if(k==1) ans=m;
else if(k >= m)
{
for(ll i=2; i<=m; i++)
ans = (ans + k -1)%(i+n-m)+1;
}
else
{
ll now = 1;
ll a = n-m;
while(now < m)
{
ll d = (ll)ceil((now + a - ans)*1.0/(k-1));
if(d == 0) d++;
if(now+d >= m)
{
d = m-now;
}
now +=d;
ll mod = (now+a);
ans = (ans + k*d%mod-1+mod)%mod+1;
}
}
return ans;
}
int main()
{
for(scanf("%lld",&t); t; t--)
{
scanf("%lld%lld%lld",&n,&m,&k);
printf("Case #%lld: %lld\n",carry++,Fibonacci(n,m,k));
}
return 0;
}