Python模数结果不正确

Fra*_*anz 3 python

我完全难过了.我使用以下值计算RSA中54号的密码:

P = 5; Q = 29; n = 145 d = 9; E = 137

所以加密的数字54将是:

54 ^ 137 mod 145

或等效于python:

import math
math.pow(54,137)%145
Run Code Online (Sandbox Code Playgroud)

我的计算器给了我24,我的python语句给了我54.0.Python显然是错误的,但我不知道为什么或如何.在你的Python安装上试一试.我的版本是2.5.1但我也试过2.6.5同样不正确的结果.

S.L*_*ott 14

>>> pow(54,137,145)
24
Run Code Online (Sandbox Code Playgroud)

math.pow是浮点数.你不希望这样.浮点值的有效精度小于17位.54**137有237位数字.


use*_*379 7

那是因为使用math模块基本上只是C数学库的Python包装器,它没有任意精度数.这意味着math.pow(54,137)将54 ^ 137计算为64位浮点数,这意味着它不足以保存如此大数的所有数字.尝试使用Python的普通内置任意精度整数:

>>> (54 ** 137) % 145
24L
Run Code Online (Sandbox Code Playgroud)

  • 使用3参数`pow(x,y,z)`而不是'x**y%z`进行模数运算通常是一个非常好的想法 - 它避免了创建潜在巨大中间值的需要`x**y `. (6认同)