快速幂取模

作用:优化普通求幂算法的时间,空间复杂度,由一个O(n)优化到O(logn)。

算法

1.      (a*b)%c=(a%c)*(b%c)

2.      例如:1003的2进制是1111101011 ,

说明:此算法不可算负次方的情况,负数幂可用,记得边算边取模。

代码

int fpow(int a,int n,int mod)    //输入参数  
{
    int Ans=1;
    a=a%mod;
    while(n!=0)
    {
        if(n&1)              //判断最后一位是否为0
            Ans=(Ans*a)%mod;
        n>>=1;              //位运算,删除二进制下的最后一位
        a=a*a%mod;          //每次平方倍后取模
    }
    return Ans;               //返回结果
}

  

原文地址:https://www.cnblogs.com/l1l1/p/8697564.html