如何计算2对一个大数的幂与另一个大数的模?

2024-04-23 11:03:58 发布

您现在位置:Python中文网/ 问答频道 /正文

M=11579208923731619542357098500868790785326998465640564039457584007908834671663

29651480776011917459957299373576180339312098253841362800539826362414936958669%M=

可以用Python计算吗?还是有其他方法


Tags: 方法
1条回答
网友
1楼 · 发布于 2024-04-23 11:03:58

为了计算结果,三个参数pow有效地实现了这一点,正如@MarkDickinson在注释中提到的那样

如何工作的简化说明:

  • 要计算2**N mod M,首先要找到K = 2**(N//2) mod M
  • 如果N是偶数,2**N mod M = K * K mod M
  • 如果N是奇数,2**N mod M = K * K * 2 mod M 这样,就不需要计算庞大的数字。实际上,pow使用了更多的技巧,更通用,不需要递归

下面是一些演示代码:

def pow_mod(B, E, M):
    if E == 0:
        return 1
    elif E == 1:
        return B % M
    else:
        root = pow_mod(B, E // 2, M)
        if E % 2 == 0:
            return (root * root) % M
        else:
            return (root * root * B) % M

M = 115792089237316195423570985008687907853269984665640564039457584007908834671663
E = 96514807760119017459957299373576180339312098253841362800539826362414936958669

print(pow_mod(2, E, M))
print(pow(2, E, M))

相关问题 更多 >