Procedure from library hyperel.lib (see hyperel_lib).
Usage:
cantormult(m,D,h,f);
Return:
list res=m*D
Note:
important: Divisor D has to be semireduced!
Uses repeated doublings for a faster computation
of the reduced divisor m*D.
Attention: Factor m=int, this means bounded.
For m<0 the inverse of m*D is returned.
The divisors are defined over the basering.
Curve C: y^2+h(x)y=f(x) is defined over the basering.
Example:
LIB "hyperel.lib";
ring R=7,x,dp;
// hyperelliptic curve y^2 + h*y = f
poly h=x;
poly f=x5+5x4+6x2+x+3;
// reduced divisor
list D=x2-1,2x-1;
cantormult(34,D,h,f);
==> [1]:
==> x2-3x-3
==> [2]:
==> x+1