快速幂 快速幂求模
求幂嘛,直接循环就好了啊~
那么问题来了
求2的1234567899874651次幂对100007取余用循环每秒 只能跑10e8的数据,铁定超时
这时候,快速幂就派上用场了
先说一说快速幂原理:
比如说求7的13次方,现在令a = 7,b = 13,ans = 7^13
那么是不是有ans = 7 ^ (1*2^0 + 0*2^1 + 1*2^2 + 1*2^3)
其实就是把13转换为了2进制表达的形式而已
但是这样快了很多注意到没有
循环需要进行13次运算,才用快速幂的话只需要进行4次!!
long long Quink(long long a,long long b){
long long ans = 1; //结果
while(b){
if(b&1){ //等价于b%2==1,因为需要判断上面0*2^1的情况,
ans = ans*a%mod; //这里需要#define mod xxxx xxxx为要取模的数
}
a = a*a%mod; //a进行平方运算
b>>=1; // b/2
}
return ans;
}
如果还是不清楚的话可以复制代码自己Debug看一下变量的变化情况