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
根据椭圆曲线上的加法定义
用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 )