快速幂要用二分指数的办法来计算,

一般只用把结果取余就可以了

例题

NOIP2013提高组day2第一题 转圈游戏

读题可以知道本题就是求(10^k*m+x)%n

就求10^k%n

可以用记忆化搜索,记得不要dfs两次一样的,设个long long 保存

但也可用直接 用二进制来分解K

一下是最后一种代码

#include <iostream>
#include<cstdio>
using namespace std;
long long n,m,x,k,a=10,ys=1;
int main()
{
  cin>>n>>m>>k>>x;
  while(k)
  {
    if(k&1)ys=ys*a%n;
    a=a*a%n;
    k>>=1;//可用二进制思考
    }
  ys%=n;
  cout<<(x+m*ys)%n;
  return 0;
}

 

 

 

 

posted on 2016-07-12 21:36  李万  阅读(128)  评论(0编辑  收藏  举报