数学笔记-椭圆曲线

椭圆曲线定义

数学上,椭圆曲线并不是椭圆 x 2 / a 2 + y 2 / b 2 = 1 x^2/a^2+y^2/b^2=1 x2/a2+y2/b2=1,而是 y 2 = x 3 + a x + b y^2=x^3+ax+b y2=x3+ax+b 这样形式的方程。
椭圆曲线来源于计算椭圆弧长的椭圆积分 ∫ d x x 4 + a x 3 + b x 2 + c x + d \int\frac{dx}{\sqrt{x^4+ax^3+bx^2+cx+d}} x4+ax3+bx2+cx+d dx,从而注意到方程 y 2 = x 4 + a x 3 + b x 2 + c x + d y^2=x^4+ax^3+bx^2+cx+d y2=x4+ax3+bx2+cx+d,而这个方程可以转换成 y 2 = x 3 + a x + b y^2=x^3+ax+b y2=x3+ax+b的形式。
另外,椭圆曲线定义是域上亏格为1的光滑射影曲线(这个内容水很深,留到新文章讨论)。

椭圆曲线基本型式

型式椭圆曲线备注
a-form y 2 + a 1 x y + a 3 y = x 3 + a 2 x 2 + a 4 x + a 6 y^2+a_1xy+a_3y=x^3+a_2x^2+a_4x+a_6 y2+a1xy+a3y=x3+a2x2+a4x+a6 y = η − ( a 1 x + a 3 ) / 2 y=\eta-(a_1x+a_3)/2 y=η(a1x+a3)/2, 可得到b-form
b-form η 2 = x 3 + b 2 x 2 + b 4 x + b 6 \eta^2=x^3+b_2x^2+b_4x+b_6 η2=x3+b2x2+b4x+b6 x = ξ − b 2 / 3 x=\xi-b_2/3 x=ξb2/3,可得到c-form
c-form η 2 = ξ 3 + c 4 ξ + c 6 \eta^2=\xi^3+c_4\xi+c_6 η2=ξ3+c4ξ+c6

其中, { b 2 = a 2 + a 1 2 / 4 b 4 = a 4 + a 1 a 3 / 2 b 6 = a 6 + a 3 2 / 4 \begin{cases} b_2=a_2+a_1^2/4 \\ b_4=a_4+a_1a_3/2 \\ b_6=a_6+a_3^2/4 \end{cases} b2=a2+a12/4b4=a4+a1a3/2b6=a6+a32/4 ,以及 { c 4 = − b 2 2 / 3 + b 4 c 6 = 2 b 2 3 / 27 − b 2 b 4 / 3 + b 6 \begin{cases} c_4=- b_2^2/3 + b_4\\ c_6=2b_2^3/27 - b_2b_4/3 + b_6 \end{cases} {c4=b22/3+b4c6=2b23/27b2b4/3+b6
判别式: Δ = − 16 ( 4 c 4 3 + 27 c 6 2 ) \Delta=-16(4c_4^3+27c_6^2) Δ=16(4c43+27c62),仅当 Δ ≠ 0 \Delta \ne 0 Δ=0时为椭圆曲线方程

椭圆曲线转换

接下来,将介绍如何将各类三次方程转换成椭圆曲线。

将一般三次曲线转化成椭圆曲线

笔者在参考资料 Matsuura-projective_transformation.pdf 上,增加对最后的 P ( x ) y 2 + Q ( x ) y + R ( x ) = 0 P(x)y^2+Q(x)y+R(x)=0 P(x)y2+Q(x)y+R(x)=0 转换过程。
具体算法如下
对于一般的三次曲线 E : F ( x , y , z ) = a 0 x 3 + a 1 x 2 y + a 2 x y 2 + a 3 y 3 + b 0 x 2 + b 1 x y + b 2 y 2 + c 1 x + c 2 y + d = 0 E:F(x,y,z)=a_0x^3+a_1x^2y+a_2xy^2+a_3y^3+b_0x^2+b_1xy+b_2y^2+c_1x+c_2y+d=0 EF(x,y,z)=a0x3+a1x2y+a2xy2+a3y3+b0x2+b1xy+b2y2+c1x+c2y+d=0
这里以 F 1 ( x , y , z ) = 2 x 3 + 3 y 3 − 5 = 0 F_1(x,y,z)=2x^3+3y^3-5=0 F1(x,y,z)=2x3+3y35=0为例进行说明

步骤说明示例
1齐次化,将 x , y x,y x,y 分别替换成 x / z , y / z x/z,y/z x/z,y/z, 再乘上 z 3 z^3 z3重写 F 1 F_1 F1 F 1 ( x , y , z ) = 2 x 3 + 3 y 3 − 5 z 3 = 0 F_1(x,y,z)=2x^3+3y^3-5z^3=0 F1(x,y,z)=2x3+3y35z3=0
2找到一个非全零的解 ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0,y0,z0),使得 F ( x 0 , y 0 , z 0 ) = 0 F(x_0,y_0,z_0)=0 F(x0,y0,z0)=0找到 ( 1 , 1 , 1 ) (1,1,1) (1,1,1) F 1 ( x , y , z ) = 0 F_1(x,y,z)=0 F1(x,y,z)=0的解
3计算 F ( x , y , z ) F(x,y,z) F(x,y,z) ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0,y0,z0) 上的切平面,即 W ( x , y , z ) = ( x − x 0 ) F x ′ ( x 0 ) + ( y − y 0 ) F y ′ ( y 0 ) + ( z − z 0 ) F z ′ ( z 0 ) = 0 W(x,y,z)=(x-x_0)F'_x(x_0)+(y-y_0)F'_y(y_0)+(z-z_0)F'_z(z_0)=0 W(x,y,z)=(xx0)Fx(x0)+(yy0)Fy(y0)+(zz0)Fz(z0)=0 F 1 ( x , y , z ) F_1(x,y,z) F1(x,y,z) ( 1 , 1 , 1 ) (1,1,1) (1,1,1)上的切平面为 W = 2 x + 3 y − 5 z = 0 W=2x + 3y - 5z=0 W=2x+3y5z=0
4计算 W ( x , y , z ) = 0 W(x,y,z)=0 W(x,y,z)=0 F ( x , y , z ) = 0 F(x,y,z)=0 F(x,y,z)=0的交点 ( x 1 , y 1 , z 1 ) (x_1,y_1,z_1) (x1,y1,z1) W = 0 W=0 W=0 得到 z = ( 2 x + 3 y ) / 5 z=(2x+3y)/5 z=(2x+3y)/5 得到 0 = F ( x , y , ( 2 x + 3 y ) / 5 ) = 6 ( x − y ) 2 ( 7 x + 8 y ) / 25 0=F(x,y,(2x+3y)/5)=6(x - y)^2(7x + 8y)/25 0=F(x,y,(2x+3y)/5)=6(xy)2(7x+8y)/25,即 ( x 1 , y 1 , z 1 ) = λ ( − 8 , 7 , 1 ) (x_1,y_1,z_1)=\lambda(-8,7,1) (x1,y1,z1)=λ(8,7,1)
5计算 F ( x , y , z ) F(x,y,z) F(x,y,z) ( x 1 , y 1 , z 1 ) (x_1,y_1,z_1) (x1,y1,z1) 上的切平面 U ( x , y , z ) U(x,y,z) U(x,y,z) F 1 ( x , y , z ) F_1(x,y,z) F1(x,y,z) ( − 8 , 7 , 1 ) (-8,7,1) (8,7,1)上的切平面为 U = 128 x + 147 y − 5 z = 0 U=128x + 147y - 5z=0 U=128x+147y5z=0
6找一个与 U = 0 , W = 0 U=0,W=0 U=0,W=0无关的线性方程 V ( x , y , z ) V(x,y,z) V(x,y,z),使得 V ( x 0 , y 0 , z 0 ) = 0 V(x_0,y_0,z_0)=0 V(x0,y0,z0)=0因为有 x 0 + y 0 − 2 z 0 = 0 x_0+y_0-2z_0=0 x0+y02z0=0, 所以设 V = x + y − 2 z V=x+y-2z V=x+y2z
7根据 ( U , V , W ) T = M × ( x , y , z ) T (U,V,W)^T=M\times (x,y,z)^T (U,V,W)T=M×(x,y,z)T, 解出 ( x , y , z ) T = M − 1 ( U , V , W ) T (x,y,z)^T=M^{-1}(U,V,W)^T (x,y,z)T=M1(U,V,W)T ( U V W ) = ( 128 147 − 5 1 1 − 2 2 3 − 5 ) ( x y z ) \begin{pmatrix}U \\ V \\ W\end{pmatrix}=\begin{pmatrix}128&147&-5 \\ 1&1&-2 \\ 2&3&-5\end{pmatrix}\begin{pmatrix} x \\ y \\ z\end{pmatrix} UVW = 1281214713525 xyz ,得到 ( x y z ) = 1 270 ( 1 720 − 289 1 − 630 251 1 − 90 − 19 ) ( U V W ) \\\begin{pmatrix}x \\ y \\ z\end{pmatrix}=\frac{1}{270}\begin{pmatrix}1&720&-289 \\1&-630&251\\1&-90&-19\end{pmatrix}\begin{pmatrix}U \\ V \\ W\end{pmatrix} xyz =2701 1117206309028925119 UVW
8 ( U , V , W ) (U,V,W) (U,V,W)为参数的 ( x , y , z ) (x,y,z) (x,y,z)代入 F ( x , y , z ) = 0 F(x,y,z)=0 F(x,y,z)=0,再令W=1并化简 F 1 = 810 ( U 2 W + 8100 U V 2 − 6660 U V W + 1312 U W 2 + 5040 V W 2 − 989 W 3 ) = 0 F_1=810(U^2W + 8100UV^2 - 6660UVW + 1312UW^2 + 5040VW^2 - 989W^3)=0 F1=810(U2W+8100UV26660UVW+1312UW2+5040VW2989W3)=0, 即 F 2 = ( 8100 U ) V 2 + ( − 6660 U + 5040 ) V + ( U 2 + 1312 U − 989 ) = 0 F_2=(8100U)V^2 +(-6660U+ 5040)V+(U^2+1312U- 989)=0 F2=(8100U)V2+(6660U+5040)V+(U2+1312U989)=0
9计算 F 2 F_2 F2的判别式,令其为 Q 2 Q^2 Q2 Q 2 = ( − 6660 U + 5040 ) 2 − 4 ( 8100 U ) ( U 2 + 1312 U − 989 ) = − 32400 U 3 + 1846800 U 2 − 35089200 U + 25401600 Q^2=(-6660U+ 5040)^2-4(8100U)(U^2+1312U- 989)=-32400 U^3 + 1846800 U^2 - 35089200 U + 25401600 Q2=(6660U+5040)24(8100U)(U2+1312U989)=32400U3+1846800U235089200U+25401600
10转换为椭圆曲线 U = 19 − p , Q = 180 q U= 19 - p ,Q= 180q U=19p,Q=180q, 得到 q 2 = p 3 − 6075 \\q^2=p^3- 6075 q2=p36075, 并且有 x = p 2 − 45 p + 270 − 8 q y = p 2 − 30 p + 405 + 7 q z = p 2 + 18 p − 675 + q \\x =p^2-45p+270-8q\\y =p^2 - 30p + 405+7q\\z =p^2 + 18p - 675+q x=p245p+2708qy=p230p+405+7qz=p2+18p675+q

备注:整个算法最困难的是第2步(找到一个非全零的解),有些椭圆曲线本身就没有有理解。第2步的解只是影响到(x,y,z)与(p,q)的映射关系,无不影响最后转换出来的椭圆曲线。

具体过程可以参考代码:

import sympy
from fractions import Fraction


def Weierstrass(F, x0, y0, z0):
    x0 = Fraction(1, 1) * x0
    y0 = Fraction(1, 1) * y0
    z0 = Fraction(1, 1) * z0
    x,y,z = sympy.symbols("x y z")
    # 确定 (x0,y0,z0) 是 F=0 上的点
    if F.subs({x: x0, y: y0, z: z0}) != 0:
        print("error", F, "@", x0, y0, z0)
        return

    # 计算过点(x0,y0,z0)的切平面zf
    zf = sympy.diff(F, x).subs({x:x0, y:y0, z:z0})*(x - x0) + \
        sympy.diff(F, y).subs({x:x0, y:y0, z:z0})*(y - y0) + \
        sympy.diff(F, z).subs({x:x0, y:y0, z:z0})*(z - z0)
    mat = sympy.matrices.zeros(3, 3)
    mat[2, 0] = zf.coeff(x)
    mat[2, 1] = zf.coeff(y)
    mat[2, 2] = zf.coeff(z)
    
    # 计算切平面zf与F0的交点(x1,y1,z1)
    if zf.coeff(y) != 0:
        yf = y - zf / zf.coeff(y)
        f0 = F.subs({y: yf}) / (z0 * x - x0 * z) / (z0 * x - x0 * z)
        f0 = sympy.ratsimp(f0)
        x1 = -f0.coeff(z)
        z1 = f0.coeff(x)
        y1 = yf.subs({x: x1, z: z1})
    elif zf.coeff(z) != 0:
        yf = z - zf / zf.coeff(z)
        f0 = F.subs({z: yf}) / (y0 * x - x0 * y) / (y0 * x - x0 * y)
        f0 = sympy.ratsimp(f0)
        x1 = -f0.coeff(y)
        y1 = f0.coeff(x)
        z1 = yf.subs({x: x1, y: y1})
    else:
        print("error2 ", zf)
        return

    # 计算过点(x1,y1,z1)的切平面xf
    xf = sympy.diff(F, x).subs({x:x1, y:y1, z:z1})*(x - x1) + \
        sympy.diff(F, y).subs({x:x1, y:y1, z:z1})*(y - y1) + \
        sympy.diff(F, z).subs({x:x1, y:y1, z:z1})*(z - z1)
    mat[0, 0] = xf.coeff(x)
    mat[0, 1] = xf.coeff(y)
    mat[0, 2] = xf.coeff(z)
    
    # 随机设置yf
    if z0 == 0:
        mat[1, 0] = y0
        mat[1, 1] = -x0
        mat[1, 2] = 0
    else:
        mat[1, 0] = 1
        mat[1, 1] = 1
        mat[1, 2] = -(x0+y0)/z0
    #print(mat)
    
    # 此时有 (p,t,1) = mat * (x,y,z), 解得 (x,y,z) = inv * (p,t,1)
    inv = mat.inv()
    #print(inv)
    p,q,t = sympy.symbols("p q t")
    X = inv[0, 0] * p + inv[0, 1] * t + inv[0, 2]
    Y = inv[1, 0] * p + inv[1, 1] * t + inv[1, 2]
    Z = inv[2, 0] * p + inv[2, 1] * t + inv[2, 2]
    
    # 将 (x,y,z) 代入 F = 0, 得到 G = q2(p)*t^2 + q1(p)*t + q0(p) = 0的方程
    F1 = sympy.expand(F.subs({x:X, y:Y, z:Z}))
    #print("0 =", F1)
    q2 = F1.coeff(t**2)
    q1 = F1.coeff(t)
    q0 = F1 - q2 * t**2 - q1 * t
    
    # 求G的二次方程特征值,得到最终的方程 q^2=H(p)
    F2 = sympy.expand(q1 * q1 - 4 * q2 * q0)
    print("solve q**2 =", F2)
    t = (-q1 + q) / (2 * q2)
    # 以(p,q)为参数, 重新计算(x,y,z)
    xf = inv[0, 0] * p + inv[0, 1] * t + inv[0, 2]
    yf = inv[1, 0] * p + inv[1, 1] * t + inv[1, 2]
    zf = inv[2, 0] * p + inv[2, 1] * t + inv[2, 2]
    print("x =", sympy.factor(xf))
    print("y =", sympy.factor(yf))
    print("z =", sympy.factor(zf))
    print("check ", sympy.factor(F.subs({x:xf, y:yf, z:zf})))

x,y,z = sympy.symbols("x y z")
F = 1*x**3 + 2*y**3 + 3*z**3 + 4*x*y*z
Weierstrass(F, -1, 1, 1)

将四次曲线 y 2 = q 2 x 2 + a x + b + c y^2=q^2x^2+ax+b+c y2=q2x2+ax+b+c 转化成椭圆曲线

y 2 = q 2 x 4 + a x 2 + b x + c → y = q x 2 + u ( q x 2 + u ) 2 = q 2 x 4 + a x 2 + b x + c → 展开化简 ( a − 2 q u ) x 2 + b x + ( c − u 2 ) = 0 → 判别式为 v 2 Δ = b 2 − 4 ( a − 2 q u ) ( c − u 2 ) = v 2 → 展开 v 2 = − 8 q u 3 + 4 a u 2 + 8 c q u + ( b 2 − 4 a c ) → 同乘上 q 2 ( q v ) 2 = ( − 2 q u ) 3 + a ( − 2 q u ) 2 − 4 c q 2 ( − 2 q u ) + ( b 2 − 4 a c ) q 2 y^2=q^2x^4+ax^2+bx+c\\ \xrightarrow{y=qx^2+u}(qx^2+u)^2=q^2x^4+ax^2+bx+c\\ \xrightarrow{展开化简}(a-2qu)x^2+bx+(c-u^2)=0\\ \xrightarrow{判别式为v^2}\Delta=b^2-4(a-2qu)(c-u^2)=v^2\\ \xrightarrow{展开} v^2=-8qu^3+4au^2+8cqu+(b^2-4ac)\\ \xrightarrow{同乘上q^2} (qv)^2=(-2qu)^3+a(-2qu)^2-4cq^2(-2qu)+(b^2-4ac)q^2 y2=q2x4+ax2+bx+cy=qx2+u (qx2+u)2=q2x4+ax2+bx+c展开化简 (a2qu)x2+bx+(cu2)=0判别式为v2 Δ=b24(a2qu)(cu2)=v2展开 v2=8qu3+4au2+8cqu+(b24ac)同乘上q2 (qv)2=(2qu)3+a(2qu)24cq2(2qu)+(b24ac)q2
即为椭圆曲线 t 2 = s 3 + a s 2 − 4 c q 2 s + ( b 2 − 4 a c ) q 2 t^2=s^3+as^2-4cq^2s+(b^2-4ac)q^2 t2=s3+as24cq2s+(b24ac)q2
此时 x = − b q ± t 2 q ( a + s ) , y = ± q ( x 2 − s 2 ) x=\frac{-bq\pm t}{2q(a+s)},y=\pm q(x^2-\frac{s}{2}) x=2q(a+s)bq±t,y=±q(x22s)

y 2 = a x 4 + b x 3 + c x 2 + d x + q 2 → 令 x = 1 / z , 并同乘 z 4 ( y z 2 ) 2 = a + b z + c z 2 + d z 3 + q 2 z 4 → w = z + d / 4 q 2 y ′ 2 = q 2 w 4 + c ′ w 2 + b ′ w + w y^2=ax^4+bx^3+cx^2+dx+q^2\\ \xrightarrow{令x=1/z,并同乘z^4}(yz^2)^2=a+bz+cz^2+dz^3+q^2z^4\\ \xrightarrow{w=z+d/4q^2}y'^2=q^2w^4+c'w^2+b'w+w y2=ax4+bx3+cx2+dx+q2x=1/z,并同乘z4 (yz2)2=a+bz+cz2+dz3+q2z4w=z+d/4q2 y′2=q2w4+cw2+bw+w
再根据上面算法可转化成椭圆曲线

常见方程及转换结果

序号方程椭圆曲线方程映射特殊点
1 x 3 + y 3 = n x^3+y^3=n x3+y3=n q 2 = p 3 − 432 n 2 q^2=p^3-432n^2 q2=p3432n2 x , y = ( 36 n ± q ) / 6 p x,y=(36n\pm q)/6p x,y=(36n±q)/6p
2 x 2 + y 2 = z 2 n = x y / 2 x^2+y^2=z^2\\n=xy/2 x2+y2=z2n=xy/2 q 2 = p 3 − n 2 p q^2=p^3-n^2p q2=p3n2p x = q / p y = 2 n p / q x=q/p\\y=2np/q x=q/py=2np/q p = ± n , 0 q = 0 p=\pm n,0\\q=0 p=±n,0q=0
3 x 3 + y 3 + z 3 = n x y z x^3+y^3+z^3=nxyz x3+y3+z3=nxyz q 2 = p 3 + n 2 p 2 − 72 n p − 64 n 3 − 432 q^2=p^3+n^2p^2-72np-64n^3-432 q2=p3+n2p272np64n3432 x = 6 p + 8 n 2 y , z = − n p − 36 ± q x=6p+8n^2\\y,z=-np-36\pm q x=6p+8n2y,z=np36±q p = 4 ( n + 3 ) q = ± 4 ( n 2 + 3 n + 9 ) p=4(n+3)\\q=\pm 4(n^2+3n+9) p=4(n+3)q=±4(n2+3n+9)
4 y / x + z / y + x / z = n y/x+z/y+x/z=n y/x+z/y+x/z=n q 2 = p 3 + ( n p + 4 ) 2 q^2=p^3+(np+4)^2 q2=p3+(np+4)2 y / x = − 4 / p z / x = 2 p / ( n p + 4 ± q ) y/x=-4/p\\z/x=2p/(np+4 \pm q) y/x=4/pz/x=2p/(np+4±q) p = 0 q = ± 4 p=0\\q=\pm 4 p=0q=±4
5 ( x + y + z ) 3 = n x y z (x+y+z)^3=nxyz (x+y+z)3=nxyz q 2 = p 3 + ( n 2 − 12 n ) p 2 + 48 n 2 p − 64 n 3 q^2=p^3+(n^2-12n)p^2+48n^2p-64n^3 q2=p3+(n212n)p2+48n2p64n3 x = 8 n 2 y , z = − n p ± q x=8n^2\\y,z=-np\pm q x=8n2y,z=np±q p = 4 n q = ± 4 n 2 p=4n\\q=\pm4n^2 p=4nq=±4n2
6 x / ( y + z ) + y / ( x + z ) + z / ( x + y ) = n x/(y+z)+y/(x+z)+z/(x+y)= n x/(y+z)+y/(x+z)+z/(x+y)=n q 2 = p 3 + ( 4 n 2 + 12 n − 3 ) p 2 + 32 ( n + 3 ) p q^2=p^3+(4n^2+12n-3)p^2+32(n+3)p q2=p3+(4n2+12n3)p2+32(n+3)p x = 2 ( n + 2 ) p + 8 ( n + 3 ) y , z = p − 8 ( n + 3 ) ± q x=2(n+2)p+8(n+3)\\y,z=p-8(n+3) \pm q x=2(n+2)p+8(n+3)y,z=p8(n+3)±q p = 0 , 4 , 8 ( n + 3 ) p=0,4,8(n+3) p=0,4,8(n+3)
7 ( y + z ) / x + ( x + z ) / y + ( x + y ) / z = n (y+z)/x+(x+z)/y+(x+y)/z=n (y+z)/x+(x+z)/y+(x+y)/z=n q 2 = p 3 + ( n 2 − 12 ) p 2 + 16 ( n + 3 ) p q^2=p^3+(n^2-12)p^2+16(n+3)p q2=p3+(n212)p2+16(n+3)p x = 2 p − 8 ( n + 3 ) y , z = ( n + 2 ) p ± q x=2p-8(n+3)\\y,z=(n+2)p\pm q x=2p8(n+3)y,z=(n+2)p±q p = 0 , 4 , 4 ( n + 3 ) p=0,4,4(n+3) p=0,4,4(n+3)

第1行的证明:
x 3 + y 3 = N → 换元 ( 1 / u + v ) 3 + ( 1 / u − v ) 3 = 2 / u 3 + 6 v 2 / u = N → 两边乘 216 N 2 u 3 432 N 2 + ( 36 N u v ) 2 = ( 6 N u ) 3 → ( 36 N ( x − y ) x + y ) 2 = ( 12 N x + y ) 3 − 432 N 2 x^3+y^3=N\\ \xrightarrow{换元}(1/u+v)^3+(1/u-v)^3=2/u^3+6v^2/u=N\\ \xrightarrow{两边乘216N^2u^3}432N^2+(36Nuv)^2=(6Nu)^3\\ \xrightarrow{} (\frac{36N(x-y)}{x+y})^2=(\frac{12N}{x+y})^3-432N^2 x3+y3=N换元 (1/u+v)3+(1/uv)3=2/u3+6v2/u=N两边乘216N2u3 432N2+(36Nuv)2=(6Nu)3 (x+y36N(xy))2=(x+y12N)3432N2

第2行的证明:
a 2 + b 2 = c 2 , n = a b / 2 → b = 2 n / a ( 2 n / a ) 2 + a 2 = c 2 → 两边乘 a 2 4 n 2 + a 4 = ( a c ) 2 = ( a 2 + t ) 2 → 展开化简 4 n 2 = 2 a 2 t + t 2 → 两边除以 8 ( a t / 2 ) 2 = ( − t / 2 ) 3 − n 2 ( − t / 2 ) → y 2 = x 3 − n 2 x a^2+b^2=c^2,n=ab/2\\ \xrightarrow{b=2n/a}(2n/a)^2+a^2=c^2\\ \xrightarrow{两边乘a^2}4n^2+a^4=(ac)^2=(a^2+t)^2\\ \xrightarrow{展开化简}4n^2=2a^2t+t^2\\ \xrightarrow{两边除以8}(at/2)^2=(-t/2)^3-n^2(-t/2)\\ \xrightarrow{}y^2=x^3-n^2x a2+b2=c2,n=ab/2b=2n/a (2n/a)2+a2=c2两边乘a2 4n2+a4=(ac)2=(a2+t)2展开化简 4n2=2a2t+t2两边除以8 (at/2)2=(t/2)3n2(t/2) y2=x3n2x

特别地,
x 4 + y 4 = z 4 x^4+y^4=z^4 x4+y4=z4
→ 同乘 z 2 / y 6 x 4 z 2 / y 6 + z 2 / y 2 = z 6 / y 6 \xrightarrow{同乘z^2/y^6} x^4z^2/y^6+z^2/y^2=z^6/y^6 同乘z2/y6 x4z2/y6+z2/y2=z6/y6
→ ( x 2 z y 3 ) 2 = ( z 2 y 2 ) 3 − z 2 y 2 \xrightarrow{} (\frac{x^2z}{y^3})^2=(\frac{z^2}{y^2})^3-\frac{z^2}{y^2} (y3x2z)2=(y2z2)3y2z2

椭圆曲线上的加法

假如点 P 1 ( x 1 , y 1 ) 、 P 2 ( x 2 , y 2 ) P_1(x_1,y_1)、P_2(x_2,y_2) P1(x1,y1)P2(x2,y2)是椭圆曲线 E : y 2 = x 3 + a x + b E:y^2=x^3+ax+b E:y2=x3+ax+b 上的点,那定义加法为: P 3 ( x 3 , y 3 ) = P 1 ( x 1 , y 1 ) + P 2 ( x 2 , y 2 ) P_3(x_3,y_3)=P_1(x_1,y_1)+P_2(x_2,y_2) P3(x3,y3)=P1(x1,y1)+P2(x2,y2)
{ x 3 = t 2 − x 1 − x 2 y 3 = t ( x 1 − x 3 ) − y 1 \begin{cases}x_3=t^2-x_1-x_2\\ y_3=t(x_1-x_3)-y_1\end{cases} {x3=t2x1x2y3=t(x1x3)y1
其中 t = x 1 2 + x 1 x 2 + x 2 2 + a y 1 + y 2 = { ( 3 x 1 2 + a ) / 2 y 1 P 1 = P 2 ( y 1 − y 2 ) / ( x 1 − x 2 ) P 1 ≠ P 2 t=\frac{x_1^2+x_1x_2+x_2^2+a}{y_1+y_2}=\begin{cases} (3x_1^2+a)/2y_1 &P_1 = P_2\\ (y_1-y_2)/(x_1-x_2) &P_1 \ne P_2 \end{cases} t=y1+y2x12+x1x2+x22+a={(3x12+a)/2y1(y1y2)/(x1x2)P1=P2P1=P2
再定义 无穷远点 O ( ∞ , ∞ ) O(\infty,\infty) O(,),以及其加法运算
P + O = O + P = P P ( x , y ) + P ′ ( x , − y ) = O P+O=O+P=P\\P(x,y)+P'(x,-y)=O P+O=O+P=PP(x,y)+P(x,y)=O

对于 y 2 = x 3 + a x 2 + b x + c y^2=x^3+ax^2+bx+c y2=x3+ax2+bx+c, 则有 { x 3 = t 2 − a − x 1 − x 2 y 3 = t ( x 1 − x 3 ) − y 1 \begin{cases}x_3=t^2-a-x_1-x_2\\ y_3=t(x_1-x_3)-y_1\end{cases} {x3=t2ax1x2y3=t(x1x3)y1
其中 t = ( x 1 + x 2 ) ( x 1 + x 2 − a ) − x 1 x 2 + b y 1 + y 2 = { ( 3 x 1 2 + 2 a x 1 + b ) / 2 y 1 P 1 = P 2 ( y 1 − y 2 ) / ( x 1 − x 2 ) P 1 ≠ P 2 t=\frac{(x_1+x_2)(x_1+x_2-a)-x_1x_2+b}{y_1+y_2}=\begin{cases} (3x_1^2+2ax_1+b)/2y_1 &P_1 = P_2\\ (y_1-y_2)/(x_1-x_2) &P_1 \ne P_2 \end{cases} t=y1+y2(x1+x2)(x1+x2a)x1x2+b={(3x12+2ax1+b)/2y1(y1y2)/(x1x2)P1=P2P1=P2

例如:
椭圆曲线 E 0 : y 2 = x 3 − 43 x + 166 E_0:y^2=x^3-43x+166 E0:y2=x343x+166 P ( 3 , 8 ) P(3,8) P(3,8) E 0 E_0 E0的一个有理点。
经过加法可以得到其他的有理点。

数值图像
P = ( 3 , 8 ) 2 P = P + P = ( − 5 , − 16 ) 3 P = 2 P + P = ( 11 , − 32 ) 4 P = 3 P + P = ( 11 , 32 ) 5 P = 4 P + P = ( − 5 , 16 ) 6 P = 5 P + P = ( 3 , − 8 ) 7 P = 6 P + P = ( ∞ , ∞ ) = O 8 P = 7 P + P = ( 3 , 8 ) = P P=(3,8)\\2P=P+P=(-5,-16)\\3P=2P+P=(11,-32)\\4P=3P+P=(11,32)\\5P=4P+P=(-5,16)\\6P=5P+P=(3,-8)\\7P=6P+P=(\infty,\infty)=O\\8P=7P+P=(3,8)=P P=(3,8)2P=P+P=(5,16)3P=2P+P=(11,32)4P=3P+P=(11,32)5P=4P+P=(5,16)6P=5P+P=(3,8)7P=6P+P=(,)=O8P=7P+P=(3,8)=P在这里插入图片描述

加法的作用

  1. 计算更多有理点。
    例如: x 3 + y 3 = 6 x^3+y^3=6 x3+y3=6, 可以转化为 q 2 = p 3 − 2 × 6 5 q^2=p^3-2\times 6^5 q2=p32×65, 可以找到整数解 P = ( 28 , 80 ) P=(28,80) P=(28,80),根据加法,得到 2 P = ( 16009 / 100 , − 2021723 / 1000 ) , 3 P = ( 11354888668 / 13209 2 , 1175338498126960 / 13209 3 ) 2P=(16009/100,-2021723/1000),3P=(11354888668/13209^2, 1175338498126960/ 13209^3) 2P=(16009/100,2021723/1000),3P=(11354888668/132092,1175338498126960/132093)
    同时 x , y = ( 216 ± q ) / 6 p x,y=(216\pm q)/6p x,y=(216±q)/6p,得到
    ( x 1 , y 1 ) = ( 37 / 21 , 17 / 21 ) , ( x 2 , y 2 ) = ( − 1805723 / 960540 , 2237723 / 960540 ) , ( x 3 , y 3 ) = ( 209143555850753 / 112490043311709 , − 84691068680987 / 112490043311709 ) (x_1,y_1)=(37/21,17/21),\\(x_2,y_2)=(-1805723/960540,2237723/960540),\\(x_3,y_3)=(209143555850753/112490043311709,-84691068680987/112490043311709) (x1,y1)=(37/21,17/21),(x2,y2)=(1805723/960540,2237723/960540),(x3,y3)=(209143555850753/112490043311709,84691068680987/112490043311709)
    可以看到, ( x 3 , y 3 ) (x_3,y_3) (x3,y3)的分母已经是个大数级别,暴力枚举搜索已经无法在短时间内得到。
  2. 加密算法。
    离散对数(ECDLP)问题:在离散椭圆曲线上给定两个点 P P P Q Q Q,要求找到一个整数 k k k,其满足 k P = Q kP=Q kP=Q。该问题非常困难,甚至难于大数质因数分解。根据这点可以设计不同的椭圆曲线加密算法。

挠点系与秩

注意到,对于 ( 7 n + k ) P = k P (7n+k)P=kP (7n+k)P=kP,说明 P P P的阶数是7。对于这类阶数有限的点,称为椭圆曲线的挠点。所以 P ( 3 , 8 ) P(3,8) P(3,8)是椭圆曲线 E 0 : y 2 = x 3 − 43 x + 166 E_0:y^2=x^3-43x+166 E0:y2=x343x+166 的7阶挠点。
同时,所有的 { k P } = { O , ( 3 , ± 8 ) , ( − 5 , ± 16 ) , ( 11 , ± 32 ) } \{kP\}=\{O,(3,\pm 8),(-5,\pm 16),(11,\pm 32)\} {kP}={O,(3,±8),(5,±16),(11,±32)} 构成一个7阶的循环群,这个群也称为挠点系

对于另一条椭圆曲线 E 1 : y 2 = x 3 − 16 x + 16 E_1:y^2=x^3-16x+16 E1:y2=x316x+16, 可以找到以下有理点

P2P3P4P5P6P7P8P9P10P
(0,4)(4,4)(-4,-4)(8,-20)(1,-1)(24,116)(-20/9, 172/27)(84/25, -52/125)(-80/49, -2108/343)(161/4, -2033/8)
-P-2P-3P-4P-5P-6P-7P-8P-9P-10P
(0,-4)(4,-4)(-4,4)(8,20)(1,1)(24,-116)(-20/9, -172/27)(84/25, 52/125)(-80/49, 2108/343)(161/4, 2033/8)

这里的有理点可以无限加上 ( 0 , 4 ) (0,4) (0,4),而不会出现任何重复。此时我们称为 ( 0 , 4 ) (0,4) (0,4) E 1 : y 2 = x 3 − 16 x + 16 E_1:y^2=x^3-16x+16 E1:y2=x316x+16生成元。而且 { k P ∣ k ∈ Z } \{kP|k\in Z\} {kPkZ} 构成一个无限阶的加法群,称为无挠系
同时,对于 E 1 E_1 E1,所有的有理点都可以用 ( 0 , 4 ) (0,4) (0,4)生成。我们把独立的无挠的生成元的个数,称为椭圆曲线的,例如:

  • 因为 E 0 E_0 E0不存在无挠的生成元,其秩为0。
  • 因为 E 1 E_1 E1只有一个无挠的生成元 ( 0 , 4 ) (0,4) (0,4),其秩为1。

绝大多数椭圆曲线的秩为0或1,但也存在其他数字,例如 E 2 : y 2 = x 3 − 7 x + 10 E_2:y^2=x^3-7x+10 E2:y2=x37x+10 的秩为2,因为其有两个独立的无挠生成元 P = ( 1 , 2 ) , Q = ( 3 , 4 ) P=(1,2),Q=(3,4) P=(1,2),Q=(3,4),其有理点可以表示如下(下表包含所有的整数解):

OP2P3P4P5P6P
-2Q(1/4,-23/8)(41,-262)(39/25, 212/125)(-111/49, -1294/343)(281/64, -4093/512)(3169/961, 142174/29791)(-13529/4761, 865772/328509)
-Q(3,-4)(5,10)(-2,4)(13/9, -46/27)(67, 548)(53/121, 3526/1331)(-30/289, -16090/4913)
OO(1,2)(-1,-4)(0,-26)(9/4, 19/8)(-79/25, -94/125)(439/169, -6716/2197)
Q(3,4)(-3,2)(2,-2)(13,46)(-5/9, 100/27)(37/49, -778/343)(302, -5248)
2Q(1/4,23/8)(1/9,-82/27)(31,-172)(41/25, 214/125)(-39/16, -227/64)(489/121, -9194/1331)(1871/529, 66068/12167)

秩为0的椭圆曲线上的有理点个数是有限的。当秩大于0时,可以生成无限多个有理点。
目前还不知道秩有没有上限,现已知最大的秩为 29,对应的椭圆曲线为
y 2 + x y = x 3 − 27006183241630922218434652145297453784768054621836357954737385 x +   55258058551342376475736699591118191821521067032535079608372404779149413277716173425636721497 y^2 + xy = x^3 - 27006183241630922218434652145297453784768054621836357954737385x + \ 55258058551342376475736699591118191821521067032535079608372404779149413277716173425636721497 y2+xy=x327006183241630922218434652145297453784768054621836357954737385x+ 55258058551342376475736699591118191821521067032535079608372404779149413277716173425636721497

更多信息可以查看History of elliptic curves rank records
关于椭圆曲线的信息,可以查看lmfdb 数据库

相关定理

Mordell-Weil 定理

在Q(有理数域)上,椭圆曲线E的所有有理点构成的群 E ( Q ) E(Q) E(Q),是有限生成Abel群: E ( Q ) = Z r ⊕ T E(Q)=Z^r ⊕ T E(Q)=ZrT
其中: r r r为E的秩; T T T是挠点系,为有限Abel群。

Mazur 定理

椭圆曲线的挠点系 T T T只能为以下15个群之一:

  • Z / n Z Z/nZ Z/nZ,其中 n = 1 , 2 , 3 , . . . , 9 , 10 , o r   12 n=1,2,3,...,9,10,or\ 12 n=1,2,3,...,9,10,or 12
  • Z / 2 Z ⊕ Z / 2 n Z Z/2Z ⊕ Z/2nZ Z/2ZZ/2nZ,其中 n = 1 , 2 , 3 , 4 n=1,2,3,4 n=1,2,3,4

例如:
E 0 : y 2 = x 3 − 43 x + 166 E_0:y^2=x^3-43x+166 E0:y2=x343x+166 Z / 7 Z Z/7Z Z/7Z
E 1 : y 2 = x 3 − 16 x + 16 E_1:y^2=x^3-16x+16 E1:y2=x316x+16 Z Z Z,无挠点系
E 2 : y 2 = x 3 − 7 x + 10 E_2:y^2=x^3-7x+10 E2:y2=x37x+10 Z ⊕ Z = Z 2 Z ⊕ Z=Z^2 ZZ=Z2,无挠点系

Siegel 定理

椭圆曲线上的整数点是有限的。

椭圆曲线求解

求椭圆曲线的有理解比较困难,通常步骤:

  1. 使用暴力枚举法,找到少量的整数解。
  2. 根据椭圆曲线加法得到更多的有理解。

除此之外,还可能用到其他的方法:

  1. 无穷递降法
    a 3 + 3 b 3 = 9 c 3 a³+3b³=9c³ a33b39c3 的整数解
    y 2 = x 3 − 2 y^2=x^3-2 y2=x32的正整数解
  2. 群论分析
    求 Mordell曲线 y 2 = x 3 + n y^2=x^3+n y2=x3+n 的整数解
    y 2 = x 3 − 432 y^2=x^3-432 y2=x3432的有理解
    如何证明不定方程(丢番图方程)是否有解?

有些椭圆曲线的证明过程,都可以写成一遍论文。

Mordell曲线: y 2 = x 3 + n y^2=x^3+n y2=x3+n

当n为以下数值时,曲线没有整数解:
6, 7, 11, 13, 14, 20, 21, 23, 29, 32, 34, 39, 42, 45, 46, 47,… oeis.org: y 2 = x 3 + n y^2=x^3+n y2=x3+n
-3, -5, -6, -9, -10, -12, -14, -16, -17, -21, -22, -24, -29, -30, -31, -32, -33, -34, -36, -37, -38, -41, -42, -43, -46, -50, … oeis.org: y 2 = x 3 − n y^2=x^3-n y2=x3n
秩的列表如下:

 n  rank   rational_points
 1    0    (2,3)[6]
 2    1    (-1,1)
 3    1    (1,2)
 4    0    (0,2)[3]
 5    1    (-1,2)
 6    0  
 7    0
 8    1    (1,3) x (-2,0)[2]
 9    1    (3,6) x (0,3)[3]
10    1    (-1,3)
11    1    (-7/4,19/8)
12    1    (-2,2)
13    0
14    0 
15    2    (1,4) x (1/4,31/8)
16    0    (0,4)[3]
17    2    (-2,3) x (4,9)
18    1    (7,19)
19    1    (5,12)
20    0  
21    0  
22    1    (3,7)
23    0 
24    2    (-2,4) x (1,5)
25    0    (0,5)[3]
26    1    (-1,5)
27    0    (-3,0)[2]
28    1    (2,6)
29    0
30    1    (19,83)

-1    0    (1,0)[2]
-2    1    (3,5)
-3    0
-4    1    (2,2)
-5    0
-6    0
-7    1    (2,1)
-8    0    (2,0)
-9    0
-10   0
-11   2    (3,4) x (9/4,5/8)
-12   0
-13   1    (17,70)
-14   0
-15   1    (4,7)
-16   0
-17   0
-18   1    (3,3)
-19   1    (7,18)
-20   1    (6,14)
-21   1    (37/9,188/27)
-22   1    (71/25,119/125)
-23   1    (3,2)
-24   0
-25   1    (5,10)
-26   1    (3,1) x (17/4,57/8)
-27   0    (3,0)[2]
-28   1    (4,6)
-29   1    (3133/9,175364/27)
-30   1    (31/9,89/27)

第三列表示有理数解,不同的生成元单独展示,带[*]表示其为挠点及其阶数

mordell.pdf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值