【模板】快速幂
// 快速幂 int a[N]; int tmp[N]; int qpow(int n,int m)//递归版本 { if(m==0) return 1; if(m%2==0)return qpow(n*n%mod,m/2,mod); return n*qpow(n,m-1,mod)%mod; } int qpow(int n,int m,int mod) { int ans=1; while(m) { if(m&1) ans=ans*n%mod; n=n*n%mod; m>>=1; } return ans; }
注意这里没用longlong注意加上
给你A,B,C,求A的B次方模C的余数 A,C<=10^9,B<=10^18
这是一个非常典型的分治例子
我们可以想像一下小学的时候我们如何计算2^16 2^16=4^8=16^4=256^2=65536 那如何计算2^18呢? 2^18=4^9=4*4^8=4*16^4=4*256^2=4*65536=262144 快速幂也是如此