【发布时间】:2020-03-09 22:42:01
【问题描述】:
我尝试将 Lua mod_pow() 函数(有效)重写为 Python。语法和一切对我来说看起来都不错,所以我不确定我错过了什么。有谁知道我需要在 Python 代码中进行哪些更改才能使其正常工作并像 Lua 代码一样给出 81 作为答案?
Lua 工作代码:
function modPow(b,e,m)
if m == 1 then
return 0
else
local r = 1
b = b % m
while e > 0 do
if e % 2 == 1 then
r = (r*b) % m
end
e = e >> 1 --use 'e = math.floor(e / 2)' on Lua 5.2 or older
b = (b^2) % m
end
return r
end
end
modPow(7,4,145)
81.0
Python 非工作代码:
def modular_pow(b, e, m):
if m == 1:
return 0
else:
r=1
b = b % m
while e > 0:
if e % 2 == 1:
r = (r*b) % m
e = e >> 1
b = (b^2)% m
return r
modular_pow(7,4,145)
7
【问题讨论】:
-
b^2应该是b**2 -
^在 Python 中是 XOR。 -
Barmar,如果您将其发布为答案,我会感谢您回答我的问题,这是可行的。
-
关于效率的小提示:您应该尝试通过平方来求幂,对于大指数来说通常更快:)
-
我认为这不值得回答,我投票关闭它作为一个错字。