快速幂(快速算底数的n次幂)
定义
顾名思义,快速幂就是快速算底数的n次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。
原理
快速幂算法的核心思想就是每一步都把指数分成两半,而相应的底数做平方运算。这样不仅能把非常大的指数给不断变小,所需要执行的循环次数也变小,而最后表示的结果却一直不会变。
现在,让我们来举个简单的栗子
3^10=3*3*3*3*3*3*3*3*3*3
3^10=(3*3)*(3*3)*(3*3)*(3*3)*(3*3)
3^10=(3*3)^5
3^10=9^5
9^5=(9^4)*(9^1)
9^5=(6561^1)*(9^1)
以下以求a的b次方来介绍
把b转换成二进制数。
该二进制数第i位的权为
例如
11的二进制是1011
因此,我们将a¹¹转化为算
代码
const int Mod = 1 e9 +7;
int Mul ( int x , int y) { return (1 ll * x * y ) % Mod ;}
int Add ( int x , int y) { return ( x + y ) % Mod ;}
int qpow ( int x , long long y ) {
int ret = 1;
for (; y ;y > >=1 , x = Mul (x , x ))
if(y &1) ret = Mul ( ret , x );
return ret ;
}
写在最后
感谢百度给的一些资料
有什么不足的大家可以提出来,我尽可能改进...
谢谢