快速幂算法的核心思想就是每一步都把指数分成两半,而相应的底数做平方运算(如果是奇数则先分离出一个底数转化成偶数)。这样不仅能把非常大的指数给不断变小,所需要执行的循环次数也变小,而最后表示的结果却一直不会变。最后求出的幂结果实际上就是在变化过程中所有当指数为奇数时底数的乘积(如3^10=9*6561,分别为幂降为5和1时的底数的)。
板子(经过位运算优化)
long long fastpower(long long base,long long power,long long mod)
{
long long result=1;
while(power>0){
if(power&1) result=(result*base)%mod;
power>>=1;
base=(base*base)%mod;
}
return result;
}
参考:https://blog.csdn.net/qq_19782019/article/details/85621386