只用1万年就可以学懂的快速幂

Posted Lnn.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了只用1万年就可以学懂的快速幂相关的知识,希望对你有一定的参考价值。

前言:应cc人要求而诞生的博客


  问题:求出x的n次方的值(n <= 1e9)
  朴素方法:将x乘n次。
  复杂度:O(n),n大的时候跑不动。


  快速幂:顾名思义,快速的(Ologn)求出数x的n次方
  针对问题:重复的乘法操作(数、矩阵)
  算法原理:任何数都可以用不同的2的幂来表示
   比如11 = 1011(2) , 11 = 8 + 2 + 1 , 2^11 = 2^8 * 2^2 * 2^1
   所以我们可以只去算x的(1、2、4、8、16…)次方,根据n二进制1的位置来进行累乘,二进制位为0就不乘
   我们模拟一下求 2^11。

code:(带mod版,不需要可以将mod删去)

long long quickpow(long long aa,long long bb)
{
    long long ans = 1 , base = aa;
    while(bb){
        if(bb&1)ans = (ans * base)%mod;
        base = base * base %mod;
        bb >>= 1;
    }
    return ans;
}

以上是关于只用1万年就可以学懂的快速幂的主要内容,如果未能解决你的问题,请参考以下文章

跳跳虎-图解+仿写 新手都能学懂的SpringBoot源码课

顿悟!新手都能学懂的SpringBoot源码分析!

我是如何在毕业不久只用1年就升为开发组长的

DSP 数学工具回顾:从无穷级数 到 快速傅立叶变换

poj 3613 Cow Relays矩阵快速幂+Floyd

30秒就能看懂的JavaScript 代码片段