快速幂是什么?

快速幂(快速算底数的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位的权为

例如

a^{11}=a^{2^0+2^1+2^3}

11的二进制是1011

11=2^3\times 1+2^2\times 0+2^1\times 1+2^0\times 1 

因此,我们将a¹¹转化为算a^{2^0}\times a^{2^1}\times a^{2^3}


代码

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 ;
}

写在最后

感谢百度给的一些资料

快速幂_百度百科

有什么不足的大家可以提出来,我尽可能改进...

谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值