[noip2013]转圈游戏 题解

我们可以简单地发现,答案就是(x+(10^k)*m)%n。这样的话,就是很简单就可以求出来了。10^k%n的话,我们用一下快速幂就可以解决。

#include
#define ll long long
using namespace std;
ll n,m,k,x;
ll ksm(ll a,ll b,ll c)
{
    ll ans=1;
    while(b)
    {
        if(b&1)ans=ans*a%c;
        b>>=1;
        a=a*a%c;
    } 
    return ans;
}
int main()
{
    cin>>n>>m>>k>>x;
    cout<<(x+ksm(10,k,n)*m)%n;
    return 0;
} 

你可能感兴趣的:(刷题总结,数学与结论)