快速幂

作者: 八菜冰 | 来源:发表于2019-05-29 23:39 被阅读0次

    a^n,将n表示成2的幂次和,即n = c_0 +c_12+c_22^2+...+c_n2^n
    而求a^n时,只需求a^(c_0) a^(c_12)a^(c_22^2)...a^(c_n2^n)
    换句话说就是将n转为二进制,例如5转为101,而101就代表c_2c_1c_0,当c为0时,a^(c2^n)为1,因此,我们只考虑c不为0的项,即求出所有c,当c不为0时,求a^(c2^n)
    步骤:
    对a逐次平方(由解式可以看出,乘式中每一项因子都是a的逐次平方),同时我们还需要确认c参数,即n式对2求余,确认c_0,再除以2,并向下取整,从而消去c_0,并使多项式的次数下降1,且暴露出c_1;重复进行,直至n式除以2为0,即除尽。

        def myPow(self, a, n):
            # write your code here
            ans = 1
            if n == 0:
                return 1
            if n<0:
                a = 1/a
                n = -n
            while n!=0:
                if n%2 == 1:
                    ans *= a
                a *= a
                n = int(n/2)
            return ans
    

    解释的比较乱。。也比较数学

    相关文章

      网友评论

          本文标题:快速幂

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