# -*- coding:utf-8 -*-
class Solution:
def Power(self, base, exponent):
# write code here
e=abs(exponent)
ans=1.0
while e:
if e&1==1:
ans=ans*base
base=base*base
e=e>>1
if exponent<0:
return 1/ans
else:
return ans
快速幂:以为例
可以看到,偶数次幂的幂数每一次除2,都是将之前的结果平方,而奇数幂只需单独乘一个底数就可以转化成偶数幂。
计算偶数幂对应base=base*base,奇数幂的时候转化成偶数幂(此时相当于幂数/2余1),ans=ans*base
快速幂取模:当幂次太大的时候结果会超出计算机的存储范围,常常需要用到快速幂取模的方法,有如下定理:
引理:积的取余等于取余的积的取余。
再在这条引理的基础之上,对指数型数据进行拆分以及合并,从而得到我们用的快速幂算法。
(a*b)%c = ((a%c)*(b%c))%c
# -*- coding:utf-8 -*-
class Solution:
def Power(self, base, exponent):
# write code here
ans=1.0
e=abs(exponent)
while(e>0):
if e&1:
ans=ans*e
ans=ans%mod
base=base%mod
base=base%mod
e>>1
return ans%mod