转圈游戏
luogu 1965
题目大意
求(x+m×10k)%n(x + m\times 10^k)\%n(x+m×10k)%n
输入样例
10 3 4·5
输出样例
5
数据范围
1<n<10000000<m<n,1⩽x⩽n,0<k<1091<n<10000000<m<n,1\leqslant x\leqslant n,0<k<10^91<n<10000000<m<n,1⩽x⩽n,0<k<109
解题思路
快速幂计算10k10^k10k,然后直接计算即可
代码
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define wyc n
using namespace std;
ll n, m, k, x;
ll Counting(ll x, ll y)
{ll g = 1;while(y){if (y & 1) g = g * x % wyc;x = x * x % wyc;y >>= 1;}return g;
}
int main()
{scanf("%lld%lld%lld%lld", &n, &m, &k, &x);k = Counting(10ll, k);x = (x + m * k % wyc) % wyc;printf("%lld", x);return 0;
}