Python算法为曲线添加点

时间:2015-10-06 02:01:31

标签: python algorithm

我正在尝试为椭圆曲线实现Double-and-Add算法,如下所示。但是,我没有像教科书那样产生相同的答案。相反,我得到一个重复的答案。代码有什么问题吗?

代码应该执行以下操作:

  1. 输入:Point,P和大于或等于1的整数。
  2. 设置Q = P且R =(0,0)。
  3. 循环,而n> 0。
  4. 如果n = 1 mod 2,则设置R = R + Q。
  5. 设置Q = 2Q且n = floor(n / 2)
  6. 如果n> 0,则继续步骤3的循环。
  7. 返回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
    

1 个答案:

答案 0 :(得分:0)

您使用tuple来获取积分,但+运算符会连接元组,而不是将它们的值相加。类似地,将元组乘以整数会重复元组的值,而不是将它们相乘。

我建议使用类似numpy' s array的数字类型(或者只是自己添加元组的组件,如果你不想使用{{ 1}})。