P1965 [NOIP2013 提高组] 转圈游戏

明显一次操作会让一个小朋友向右位移 \(m\) 位,即变成 \((x+m)\bmod n\)。

所以 \(10^k\) 次操作之后就是 \((x+m\times 10^k)\bmod n\)

#include<bits/stdc++.h>
using namespace std;
#define int long long
int ksm(int a,int b,int mod){
	if(b==1)return a;
	int ans=ksm(a,b>>1,mod);
	if(b&1){
		return ans*ans%mod*a%mod;
	}
	else return ans*ans%mod;
}
signed main(){
	int n,m,k,x;cin>>n>>m>>k>>x;
	cout<<(x+(m*ksm(10,k,n))%n)%n;
	return 0;
} 
上一篇:【数学】EXGCD


下一篇:「题解」Codeforces 1348E Phoenix and Berries