luogu1965 【2013提高】转圈游戏(快速幂)

一轮之后x的位置为(x+m)%n, 10k 轮之后x的位置为 (x+m10k) %n,用快速幂算一下 10k %n即可。

#include
#define ll long long
ll n,m,k,a=10,x,ans=1;
int main(){
    scanf("%lld%lld%lld%lld",&n,&m,&k,&x);
    while(k){
        if(k&1) ans=ans*a%n;
        a=a*a%n;
        k>>=1; 
    }
    ans%=n;
    ans=(x+ans*m)%n;
    printf("%lld",ans);
    return 0;
}

你可能感兴趣的:(其他oj,模拟,快速幂)