一直以来,快速求幂屡屡出现在各种题目中(内置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
"&