关于python快速求正整数幂的研究

本文探讨了Python中快速求正整数幂的不同方法,包括《高效算法》书中类C版本、内置函数`pow()`以及作者通过装饰器实现的递归版本。通过对算法的时间复杂度和空间复杂度分析,作者指出Python应利用其高级特性和抽象思维解决此类问题,而提出的算法3在保持可读性的同时,实现了接近O(log n)的时间复杂度和较高的效率。

一直以来,快速求幂屡屡出现在各种题目中(内置pow直接返回?),虽然关于python实现快速求幂可能有很多版本,大部分基于原始C语言版本的生硬的python版本,我也背过一本《高效算法》里的快速求幂,然而其趋向C过于严重,以至于过不了多久全然忘记,或者可操作性极差,需要反复翻阅,难得求职期间闲暇,故对于python版本的快速求正整数幂稍作研究。

《高效算法》版本:

def fast_exponentiation(a, b, q):
    assert a >= 0 and b >= 0 and q >= 1
    p = 0  # 只用于记录
    p2 = 1  # 2^p
    ap2 = a % q  # a^(2^p)
    result = 1
    while b > 0:
        if p2 & b > 0:  # b由a^(2^p)拆分而来
            b -= p2
            result = (result * ap2) % q
        p += 1
        p2 *= 2
        ap2 = (ap2 * ap2) % q
    return result

看不懂不要问我,自己翻书去,在下也是难以记住,类C的Python算法真正做到了只是换了语法,估计改写成C都不用费多少力气

内置函数版本:

def pow(*args, **kwargs): # real signature unknown
    """
    Equivalent to x**y (with two arguments) or x**y % z (with three arguments)
    
    Some types, such as ints, are able to use a more efficient algorithm when
    invoked using 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值