如何在SAGE中的有限域F(p)上找到椭圆曲线y ^ 2 = x ^ 3 + ax + b的最小y坐标,其中a和b大约为10 ^ 15的量级,并且整数p为大约10 ^ 45的量级很大吗?
我需要在SAGE中找到它,并且我已经尝试了许多方法。我正在发布一些代码:

    maxtime=120960000
    p = 976324781263478623476912346213469128736427364
    a = 783468734639429
    b = 98347874287423
    E = EllipticCurve(GF(p),[a,b])
    length =50
    for i in range(1,maxtime):
        e = ZZ.random_element(999999999999)
            if E.is_x_coord(I) == true:
                temp = E.lift_x(I)
                break
    i=0
    print 'P1:'
    print temp
    length=0
    t=50
    count=2
    p2=temp+temp
    while count < 10000000000:
        count=count+1
        p2=p2+temp
        if (p2[1]>0):
            if (ZZ(p2[1]) < ZZ(p-1)):
                if (p2[0] > 0):
                    if( ZZ(p2[0]) < ZZ(p-1)):
                        if E.is_x_coord(p2[0]) == true:
                            y2 = E.lift_x(p2[0])
                            length=len(str(y2[1]))
                            if length <=11:
                                print 'p2:'
                                print y2
                                print 'count:'
                                print count
                                break
                            if t > length:
                                t= length
                                print 'length:'
                                print t
                                print 'count:'
                                print count
                                print 'p2:'
                                print y2
    print 'failed:'


上面只是带有随机数的示例代码。任何建议或完全不同的想法也将非常有帮助。

非常感谢
S

最佳答案

GF(p)的元素没有自然顺序。最小y,我想你是指整数的通常顺序。这是p = 17,a = 11,b = 3的示例。解决方案是y = 3,x = 4。

sage: K = GF(17)
sage: a, b = 11, 3
sage: _.<X> = K[]
sage: P = X^3 + a*X + b
sage: next(((P - y^2).roots(), y) for y in K if (P - y^2).roots())
([(4, 1)], 3)
sage: 3^2 == P(4)
True


请注意,您的p不是素数。

10-06 04:45