ComSec第五次作业

10.12
由python代码得到点:

for x in range(7):
    for y in range(7):
        if (y*y)%7==(x*x*x+2*x+1)%7:
            print(x,y)

E7​(2,1)上的点为(0,1)(0,6)(1,2)(1,5)以及无穷远处的点

10.13

椭圆曲线上负点的定义为其逆元P = ( x , y ) P=(x,y)P=(x,y) P − 1 = ( x , − y ) P^{-1}=(x,-y)P 
−1
 =(x,−y)得到

P − 1 = ( 3 , − 5 ) = ( 3 , 2 ) P^{-1}=(3,-5)=(3,2)P 
−1
 =(3,−5)=(3,2)

Q − 1 = ( 2 , − 5 ) = ( 2 , 5 ) Q^{-1}=(2,-5)=(2,5)Q 
−1
 =(2,−5)=(2,5)

R − 1 = ( 5 , 0 ) R^{-1}=(5,0)R 
−1
 =(5,0)

10.14

根据椭圆曲线上的加法定义

 ComSec第五次作业_第1张图片

 

用python写出程序计算 G 2 − G 13

import gmpy2
def add(x1,y1,x2,y2,mod,a):
    k=0
    if x1==x2 and y1==(-y2)%mod:
        return float('inf')
    elif x1==x2 and y1==y2:
        k=(3*x1*x1+a)*gmpy2.invert(2*y1%mod,mod)%mod
        x3=(k*k-2*x1)%mod
        y3=(k*(x1-x3)-y1)%mod
        return x3,y3
    else:
        k=(y2-y1)*gmpy2.invert((x2-x1),mod)%mod
        x3=(k*k-x1-x2)%mod
        y3=(k*(x1-x3)-y1)%mod
        return x3,y3

x1=3
y1=2
mod=11
a=1
for i in range(12):
    x1,y1=add(3,2,x1,y1,mod,a)
    print("G",i+1,"的值为(",x1,y1,")")

G2的值为(1,8)
G 3 的 值 为 ( 5 , 4 )
G 4 的 值 为 ( 4 , 8 )
G 5 的 值 为 ( 7 , 7 ) 
G 6 的 值 为 ( 6 , 8 ) 
G 7 的 值 为 ( 6 , 3 ) 
G 8 的 值 为 ( 7 , 4 ) 
G 9 的 值 为 ( 4 , 3 )
G 10 的 值 为 ( 5 , 7 ) 
G 11 的 值 为 ( 1 , 3 ) 
G 12 的 值 为 ( 10 , 7 ) 
 

你可能感兴趣的:(python,开发语言)