1 | initial version |
References:
https://en.wikipedia.org/wiki/Imaginary_hyperelliptic_curve
The question implicitly assumes there is such a divisor. In order to have a "normal situation" (small(er) prime $p$, so that the prints are suited to the width of this page, that still captures the solution, its idea, and where the claimed divisor is really a divisor) let us make a small computation in $\mathbb{Z}[x]$:
R.<x> = ZZ[]
f, h = x^5 + x^3 + 1, x^2 + x
u, v = x^2 + 18*x, 17*x + 1
(f -h*v - v^2) % u
This gives:
sage: (f -h*v - v^2) % u
105283*x
Note that we have the factorization:
sage: factor(105283)
127 * 829
So let $p$ be one of the two factors, my choice is $127$. We will work with this prime a while. Finally there will be also the following bigger prime $p$ involved in a small note:
sage: p = next_prime(2^160)
sage: p
1461501637330902918203684832716283019655932542983
Then we can initialize the corresponding divisor in Mumford coordinates as follows:
p = 127
K = GF(p)
R.<x> = K[]
f, h = x^5 + x^3 + 1, x^2 + x
C = HyperellipticCurve( f, h )
J = C.jacobian()
X = J(K)
u, v = x^2 + 18*x, 17*x + 1
D = X( [u,v] )
print D
This gives:
(x^2 + 18*x, y + 110*x + 126)
Observation:
sage: K(110/126)
17
Note that modulo $p=127$ we have the fulfilled condition that u divides $v^2+vh-f$.
sage: factor( v^2 +v*h - f )
(126) * x * (x + 18) * (x^3 + 109*x^2 + 54*x + 118)
Note: A more sophisticated way to get the divisor $D$ among those with given $u$ is as follows. The roots of $u=x(x+18)$ are $0$ and $-18$. We associate the corresponding points / lifts $P, Q$ as follows:
CP, CQ = C.lift_x(0), C.lift_x(-18)
JP, JQ = J(CP), J(CQ)
print "JP = %s" % JP
print "JQ = %s" % JQ
print "+JP+JQ = %s" % (+JP+JQ)
print "+JP-JQ = %s" % (+JP-JQ)
print "-JP+JQ = %s" % (-JP+JQ)
print "-JP-JQ = %s" % (-JP-JQ)
This gives:
JP = (x, y + 126)
JQ = (x + 18, y + 1)
+JP+JQ = (x^2 + 18*x, y + 14*x + 126)
+JP-JQ = (x^2 + 18*x, y + 110*x + 126)
-JP+JQ = (x^2 + 18*x, y + 1)
-JP-JQ = (x^2 + 18*x, y + 96*x + 1)
One of the values is our $D$.
Note: As promised, let us also do some related computations for the bigger prime 1461501637330902918203684832716283019655932542983
. Same code, but this prime:
p = next_prime(2^160)
K = GF(p)
R.<x> = K[]
f, h = x^5 + x^3 + 1, x^2 + x
C = HyperellipticCurve( f, h )
J = C.jacobian()
X = J(K)
u, v = x^2 + 18*x, 17*x + 1
D = X( [u,v] )
print D
This runs immediately into the
ValueError: Argument polys (= (x^2 + 18*x, 17*x + 1)) must be divisor
on curve Hyperelliptic Curve
over Finite Field of size 1461501637330902918203684832716283019655932542983
defined by y^2 + (x^2 + x)*y = x^5 + x^3 + 1.
The error was manually reshaped.
Note: We can construct now corresponding divisors with $u=x^2+18x$ in the same way:
CP, CQ = C.lift_x(0), C.lift_x(-18)
JP, JQ = J(CP), J(CQ)
print "JP = %s" % JP
print "JQ = %s" % JQ
print "+JP+JQ = %s" % (+JP+JQ)
print "+JP-JQ = %s" % (+JP-JQ)
print "-JP+JQ = %s" % (-JP+JQ)
print "-JP-JQ = %s" % (-JP-JQ)
To see why i preferred to use $127$ instead, here is the result:
JP = (x, y + 1461501637330902918203684832716283019655932542982)
JQ = (x + 18, y + 1256459954126949149574270634668696857738035268857)
+JP+JQ = (x^2 + 18*x, y + 742142023287893335136809871805229629934516120054*x + 1461501637330902918203684832716283019655932542982)
+JP-JQ = (x^2 + 18*x, y + 1044137755672099120445471590403560727422734765797*x + 1461501637330902918203684832716283019655932542982)
-JP+JQ = (x^2 + 18*x, y + 417363881658803797758213242312722292233197777169*x + 1)
-JP-JQ = (x^2 + 18*x, y + 719359614043009583066874960911053389721416422912*x + 1)