使用python实现离散对数

使用python实现离散对数,python,logarithm,Python,Logarithm,我有一组对数,分别是L1、L2和L3,我从2015年发表的论文“超安全路由器到路由器自发密钥交换系统”中检索到: 这是方程的结果: 给定alpha=5、x=15和p=97的值。在我用Python实现它之后,我得到了错误的结果,这与表中的结果不同 代码如下: a=5 x=15 p=97 i1=0.958478 i2=4.238835 L1=pow(a,x+i1)%p L2=pow(a,x+i1+i2)%p L3=pow(a,x+i2)%p print ("L1",L1) print

我有一组对数,分别是L1、L2和L3,我从2015年发表的论文“超安全路由器到路由器自发密钥交换系统”中检索到:

这是方程的结果:

给定alpha=5、x=15和p=97的值。在我用Python实现它之后,我得到了错误的结果,这与表中的结果不同

代码如下:

a=5
x=15
p=97
i1=0.958478
i2=4.238835

L1=pow(a,x+i1)%p
L2=pow(a,x+i1+i2)%p
L3=pow(a,x+i2)%p

print ("L1",L1)
print ("L2",L2)
print ("L3",L3)
这是我得到的结果:

L1 55.596893310546875
L2 2.15625
L3 68.87890625

请帮助我识别代码中的错误。谢谢。

@abarnert,不幸的是,OP没有使用integer,因此OP不能使用3个参数
pow
。我相信python比“这些是我应该得到的值”更能正确计算。这个表来自何方,为什么要相信它?这里没有太多的代码,只是简单的计算,所以没有太多的空间让任何逻辑出错…使用**操作符可能不会相信Python来计算这些值
5**97
将足够大,四舍五入到最近的IEEE浮点值应该会有1或2位数的误差。因此,当你
%97
得到结果时,你得到的大部分是错误。信封背面的计算可能在两个方向上都偏离了几个数字,但关键是,我肯定不会仅仅假设浮点舍入在这里没有太大的相关性。如果这是问题所在,切换到
decimal.decimal
而不是
float
,并指定足够高的精度将解决问题。当然,如果这不是问题所在,如果OP只是在表中查找了错误的行或其他东西……那么,尝试
Decimal
将是一种快速排除这种可能性的方法。