2015-10-06 117 views
0

我正在尝试实现椭圆曲线的Double-Add-Add算法,这是在下面完成的。但是,我并没有像教科书那样得出同样的答案。相反,我得到了一个重复的答案。代码有什么问题吗?Python算法为曲线添加点

代码应执行下列操作:

  1. 输入:点,P和整数n大于或等于1。
  2. 集Q = P和R =(0,0)。
  3. n> 0时循环。
  4. 如果n = 1 mod 2,则设置R = R + Q。
  5. 集Q = 2Q且n =地板(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 
    

回答

0

您使用tuple有给你点,但+运算符连接的元组,而不是增加他们的价值观在一起。同样,用一个整数乘一个元组重复元组的值,而不是将它们中的每一个相乘。

我建议使用类似numpyarray的数字类型(或者只是自己添加元组的元素,如果不想使用numpy)。

+0

我该如何使用numpy来做到这一点? –