我正在尝试为椭圆曲线实现Double-and-Add算法,如下所示。但是,我没有像教科书那样产生相同的答案。相反,我得到一个重复的答案。代码有什么问题吗?
代码应该执行以下操作:
返回R点,等于nP。
def doubleandadd(n, A, B, p, (x,y)):
P=(x,y)
Q,R=P,(0,0)
while n>0:
if (n%2)==1:
R=R+Q
Q,n=2*Q,math.floor(n/2)
print R
答案 0 :(得分:0)
您使用tuple
来获取积分,但+
运算符会连接元组,而不是将它们的值相加。类似地,将元组乘以整数会重复元组的值,而不是将它们相乘。
我建议使用类似numpy
' s array
的数字类型(或者只是自己添加元组的组件,如果你不想使用{{ 1}})。