别转了,我晕辣 @_@
一道关于快速幂的好题。
关于快速幂: https://www.cnblogs.com/fusiwei/p/11599881.html (By Seaway-Fu)
题目描述
n 个小伙伴(编号从 0 到 n−1)围坐一圈玩游戏。按照顺时针方向给 n 个位置编号,从 0 到 n−1。最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置,……,依此类推。游戏规则如下:每一轮第 0 号位置上的小伙伴顺时针走到第 m 号位置,第 1 号位置小伙伴走到第 m+1 号位置,……,依此类推,第 n−m 号位置上的小伙伴走到第 0 号位置,第 n−m+1 号位置上的小伙伴走到第 1 号位置,……,第 n−1 号位置上的小伙伴顺时针走到第 m−1 号位置。
现在,一共进行了 10k 轮,请问 x 号小伙伴最后走到了第几号位置。
输入格式
共一行,包含四个整数 n,m,k,x,每两个整数之间用一个空格隔开。
输出格式
一个整数,表示 10k 轮后 x 号小伙伴所在的位置编号。
样例 #1
样例输入 #1
样例输出 #1
提示
对于 30% 的数据,0<k<7;
对于 80% 的数据,0<k<107;
对于 100% 的数据,1<n<106,0<m<n,1≤x≤n,0<k<109。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
#include<iostream> using namespace std; int main(){ int n,m,k,x,tmp=1,temp=10; cin>>n>>m>>k>>x; while(k){ if(k&1){ tmp=tmp*temp%n; } temp=temp*temp%n; k>>=1; } cout<<(x%n+m%n*tmp%n)%n<<endl; return 0; }
|