题目要求
求a的b次方 mod m 的值
b<=1e18
如果使用for循环,复杂度过高,将会超时
快速幂采用将b二进制分解。
预处理出a的偶数平方
b=5时 二进制表示为101 则 a的5次方 = a的1次方 * a的4次方
时间复杂度为O(logb)
int quick_pow(int a,int b){
int ret=1;
while(b){
if(b&1) ret=ret*a% m;//b&1来判断b是否为奇数
b>>=1; //位运算,返回b/2且去掉余数
a=a*a%m;
}
return ret;
}
取模的一些性质
(a+b)%m= (a%m+b%m)%m
(a*b)%m = (a%m*b%m)%m
而对于本题
a^b %m !=a%m^(b%m)