【问题标题】:Trouble converting a modulus pow() function from Lua to Python将模数 pow() 函数从 Lua 转换为 Python 时遇到问题
【发布时间】: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,如果您将其发布为答案,我会感谢您回答我的问题,这是可行的。
  • 关于效率的小提示:您应该尝试通过平方来求幂,对于大指数来说通常更快:)
  • 我认为这不值得回答,我投票关闭它作为一个错字。

标签: python lua pow mod


【解决方案1】:

^ 在 python 中是按位异或。参考:here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 2022-10-07
    • 2022-06-11
    • 2017-06-04
    • 2019-08-27
    • 1970-01-01
    相关资源
    最近更新 更多