为曲线添加点的Python算法

为曲线添加点的Python算法,python,algorithm,Python,Algorithm,我正在尝试实现椭圆曲线的Double和Add算法,如下所示。然而,我并没有给出与教科书相同的答案。相反,我得到了一个重复的答案。代码有什么问题吗 代码应执行以下操作: 输入:点P和大于或等于1的整数n 设置Q=P和R=(0,0) 当n>0时循环 如果n=1模2,则设置R=R+Q 设置Q=2Q和n=楼层(n/2) 如果n>0,则在步骤3继续循环 返回点R,它等于nP def doubleandadd(n, A, B, p, (x,y)): P=(x,y) Q,R=P,(0,0)

我正在尝试实现椭圆曲线的Double和Add算法,如下所示。然而,我并没有给出与教科书相同的答案。相反,我得到了一个重复的答案。代码有什么问题吗

代码应执行以下操作:

  • 输入:点P和大于或等于1的整数n
  • 设置Q=P和R=(0,0)
  • 当n>0时循环
  • 如果n=1模2,则设置R=R+Q
  • 设置Q=2Q和n=楼层(n/2)
  • 如果n>0,则在步骤3继续循环
  • 返回点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
    

  • 您正在使用
    tuple
    s作为点,但是
    +
    操作符将元组连接起来,而不是将它们的值相加。类似地,将元组乘以整数会重复元组的值,而不是将每个值相乘


    我建议改为使用数值类型,如
    numpy
    's
    array
    s(如果您不想使用
    numpy
    ,也可以自己添加元组的组件)。

    我该如何使用numpy?