快速幂

,将n表示成2的幂次和,即
而求时,只需求
换句话说就是将n转为二进制,例如5转为101,而101就代表,当c为0时,为1,因此,我们只考虑c不为0的项,即求出所有c,当c不为0时,求。
步骤:
对a逐次平方(由解式可以看出,乘式中每一项因子都是a的逐次平方),同时我们还需要确认c参数,即n式对2求余,确认,再除以2,并向下取整,从而消去,并使多项式的次数下降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

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

你可能感兴趣的:(快速幂)