Python模数结果不正确

时间:2011-02-24 02:36:49

标签: 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

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

2 个答案:

答案 0 :(得分:14)

>>> pow(54,137,145)
24

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

答案 1 :(得分:7)

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

>>> (54 ** 137) % 145
24L