| Bill Allombert on Fri, 04 Feb 2022 17:55:53 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: miller functions for elliptic curves |
On Fri, Feb 04, 2022 at 05:16:52PM +0100, Pierre Charollois wrote:
> I need a function with divisor m[P] - m[OE], for an elliptic curve over Q,
> and P, Q arbitrary torsion points.
> I can probably code this naively myself, but maybe there are for instance
> tricks that reduce the number of iterations. (I noticed papers about this).
Most of the papers are for the evaluated version. For the non-evaluated
version, speed is limited by the size of the output.
You can try the attached script (based on an old script by John Cremona).
E=ellinit("11a1");
P=[5,5]
ellorder(E,P)
f=ellweilpol(E,P,5)
%12 =(150*x^3+(-35*y-2075)*x^2+(-4*y^2+390*y+9400)*x+(y^3+5*y^2-1000*y-14000))/(x^2-32*x+256)
Is it waht you need ?
Cheers,
Bill.
Y;X;
ellequation(e)='Y^2+e.a1*'X*'Y+e.a3*'Y-('X^3+e.a2*'X^2+e.a4*'X+e.a6);
elltang(e,t)=
{
local(gpt,dyf,dxf,u,v);
if(t==[0],return(1));
dyf=2*t[2]+e[1]*t[1]+e[3];
if(dyf==0,return('x-t[1]));
dxf=e[1]*t[2]-(3*t[1]^2+2*e[2]*t[1]+e[4]);
'y-t[2]+(dxf/dyf)*('x-t[1]);
}
ellvert(e,t)=if(t==[0],1,'x-t[1]);
ellchord(e,t,s)=
{
local(gpt);
if(s==[0],return(ellvert(e,t)));
if(t==[0],return(ellvert(e,s)));
if(s==t,return(elltang(e,t)));
if(s[1]==t[1],return(ellvert(e,t)));
'y-t[2]-((t[2]-s[2])/(t[1]-s[1]))*('x-t[1]);
}
ellweilpol(e,t,m)=
{
local(kt,h);
if(m==1,return(1));
if(m==2,return(ellvert(e,t)));
if(m==3,return(elltang(e,t)));
kt=elladd(e,t,t);
h=elltang(e,t);
for(k=2,m-2,
h*=ellchord(e,t,kt);
h/=ellvert(e,kt);
kt=elladd(e,kt,t)
);
h
}