【问题标题】:calculate mod using pow function python使用 pow 函数 python 计算 mod
【发布时间】:2015-12-20 17:10:57
【问题描述】:

那么,如果我想使用 pow 函数计算 6^8 mod 5 的值,我应该在一行中输入什么??

假设您不需要先导入它

我知道 pow 的用法类似于 pow (x, y) = pow (6, 8) = 6^8 和

我的猜测是

mod.pow(6,8)

谢谢!

【问题讨论】:

  • 两种方式,pow(x, y)x**y

标签: python pow


【解决方案1】:

您可以使用 '%' 字符来获取模值。例如print(pow(6,8) % 5)print(6**8 % 5)

【讨论】:

    【解决方案2】:

    查看pow的文档:

    pow(6, 8, 5)
    

    做你想做的事。

    不要不要使用a ** b % n!虽然这会给出正确的结果,但如果您计算更大的数字,它会慢几个数量级。 pow 将在每一步中进行模运算,而 ** 将首先对整数进行取幂(这可能会产生一个 巨大的数)并仅在最后取模。

    现在,如果您对大于 32 位的数字感兴趣,您可能需要查看gmpy2 以获得更快的速度。

    【讨论】:

    • 感谢您提及 gmpy2。另一个值得一看的任意精度包是mpmath,如果你想要花哨的函数、根求解、积分等。FWIW,mpmath 将使用 gmpy,如果它可用的话。
    【解决方案3】:

    这很简单:pow 采用可选的第三个参数作为模数。

    来自docs

    pow(x, y[, z])

    返回 x 的 y 次幂;如果 z 存在,则返回 x 的 y 次幂,以 z 为模(计算效率高于 pow(x, y) % z)。 两个参数的形式 pow(x, y) 等价于使用幂运算符: x**y.

    所以你想要:

    pow(6, 8, 5)
    

    pow(x, y, z) 不仅比 (x ** y) % z 更快、更高效,而且假设 z 是一个简单的机器整数,它可以在不使用任意精度算术的情况下轻松处理 y 的大值。

    【讨论】:

    • 请注意,在 3.8+ 版本中:对于 int 操作数,pow 的三参数形式现在允许第二个参数为负数,从而允许计算模逆。现在允许使用关键字参数。以前,仅支持位置参数。
    • 非常感谢!在您的帮助下,我设法及时计算出 pow(3, 545918790 // 3, 10**9+7)。
    猜你喜欢
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    相关资源
    最近更新 更多