剑指offer:数值的整数次方

本文深入讲解了快速幂算法的原理及应用,通过实例演示如何高效计算大幂次运算,包括快速幂的基本步骤和快速幂取模算法,适用于解决计算机科学中幂次方计算效率问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# -*- 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

快速幂:以3^8为例

3^8=((3^2)^2)^2

可以看到,偶数次幂的幂数每一次除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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值