【模板】快速幂

// 快速幂
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 快速幂也是如此

原文地址:https://www.cnblogs.com/akioi/p/12204527.html