当A,B,M是大数时,如何计算(A ^ B)%M?

时间:2015-09-22 08:53:54

标签: python algorithm python-3.x math exponentiation

例如,如果A = 864927518B = 1462579282M = 193773611,如何计算(A^B)%M

有简单的方法吗?

3 个答案:

答案 0 :(得分:7)

是:使用modular exponentiation。内置pow函数的Python允许您使用其可选的第三个参数执行此操作:

>>> pow(A, B, M)
2767533

答案 1 :(得分:2)

3>> pow(864927518, 1462579282, 193773611)
2767533

答案 2 :(得分:1)

我会愉快地假设你在这里使用^作为取幂运算符(而不是XOR)。您可以使用内置的pow,也可以编写自己的代码:

import math

def expmod(i, j, m):
  """Compute (i ** j) % m"""

  acc = 1
  mask = 2 ** int(math.ceil(math.log(j, 2)))
  while mask > 0:
    acc = acc * acc
    if mask & j:
      acc = acc * i
      j = j ^ mask
    mask = mask // 2
    acc = acc % m

  return acc