美文网首页
快速幂算法

快速幂算法

作者: ABleaf | 来源:发表于2019-12-15 12:28 被阅读0次

原理

x^n = \begin{cases} {(x ^ \frac{n}{2})^2,} & 如果n是偶数\\ {x(x ^ \frac{n-1}{2})^2,} & 如果n是奇数\\ \end{cases}

例子

计算x^{13}
\begin{aligned} x^{13} &= (x^6)^2 \times x \\ &= ((x^3)^2)^2 \times x\\ &= ((x^2\times x)^2)^2\times x \end{aligned}
可以看到,原本需要12次乘法的计算,现在只需要5次乘法了。

分析

x的上标全写为二进制
\begin{aligned} x^{1101} &= (x^{110})^2 \times x^1 \\ &= ((x^{11})^2 \times x^0)^2 \times x^1\\ &= (((x^{1})^2\times x^1)^2 \times x^0)^2\times x^1 \end{aligned}

可以看到,完全展开之后,x的上标组成的二进制串正是n的二进制串。真正进行计算时,\times x^0 = \times 1可以省略。因此,用快速幂算法计算x^n时,需要进行L - 1次平方运算和C - 1次乘法运算,其中Ln的二进制位数,Cn的二进制中的1的个数。平方运算其实就是乘法运算,因此,需要进行的乘法运算次数总计为L + C - 2,介于1 \sim 2\log_2(n)之间。因此,快速幂算法的时间复杂度为
T(n) = O(\log_2n)

实现

def exp1(x, n):
    if n == 0:
        return 1
    if n == 1:
        return x
    y = exp1(x, n>>1) ** 2
    if n & 0x1:
        y *= x
    return y

测试

快速幂算法还可以像下面这样表述,时间复杂度与上面的一致。不过测试表明,比上面的要慢。
x^n = \begin{cases} {(x ^ 2)^\frac{n}{2},} & 如果n是偶数\\ {x(x ^ 2)^\frac{n-1}{2},} & 如果n是奇数\\ \end{cases}

def exp2(x, n):
    if n == 0:
        return 1
    if n == 1:
        return x
    y = exp2(x*x, n>>1)
    if n & 0x1:
        y *= x
    return y
两种快速幂算法的比较

可以看到,尽管大数乘法并非O(1),快速幂算法依然要比普通算法快得多。

相关文章

  • 模板 | 整数快速幂 & 快速幂取模

    快速幂: 所谓的快速幂,其目的是为了快速求幂,将时间复杂度从朴素算法的降到。 假如现在要求 ,按照朴素算法,就是将...

  • WOJ-315-高级机密

    主要参考了这篇文章:快速幂 蒙格马利算法 蒙哥马利(Montgomery)幂模运算是快速计算a^b%k的一种算法,...

  • 2018-07-09-快速幂

    参考:算法学习 - 快速幂和矩阵快速幂(复杂度Olog(n))C++实现 - CSDN博客

  • 快速幂算法

    快速幂算法,可以将时间复杂度从O(N)降为O(log2N)。 比如要算2^n (n>0),最简单的方法是: 时间复...

  • 快速幂算法

    原理 例子 计算。可以看到,原本需要12次乘法的计算,现在只需要5次乘法了。 分析 将的上标全写为二进制 可以看到...

  • 快速幂算法

    求解一个数的 n次方,我们一般直接累乘 n次,就像下面的代码一样: 但是这种方法只能用于指数 n比较小的情况,如果...

  • 快速幂

    快速幂 如果要我们求解,正常的做法往往是的算法,当数字很大的时候会耗费较多的时间,现在我们采用快速幂,可以将时间复...

  • Java 算法-快速幂

      说实话,自己是第一次接触到快速幂这种东西,觉得有必要记录下来。 题意: 样例: 挑战: 1.解题思路   在介...

  • Leetcode【372、1131】

    问题描述:【Math】372. Super Pow 解题思路: 快速幂算法。计算 a^b mod 1337,a 是...

  • (矩阵)快速幂

    快速乘法: 快速幂: 矩阵快速幂:

网友评论

      本文标题:快速幂算法

      本文链接:https://www.haomeiwen.com/subject/llcknctx.html