Karim Belabas on Wed, 16 May 2012 13:54:16 +0200

 Re: elliptic curves with prescribed periods

```* John Cremona [2012-05-16 12:56]:
> As it happens I wanted exactly this function myself just now.  Your
> f() as defined here did not work for me using version 2.5.1, but is OK
> with 2.6.0.
>
> In case anyone is interested, I had periods approximately [2*x,x+y*I]
> with x=0.0017237131288014931634375894696418139876 and
> y=0.0088075252675047227730811538038700492673 and Bill's function
> allowed me to recover the curve's minimal model as [1, 1, 1,
> -229872576744, -42424810617266967].  This curve has conductor 238854
> and will soon be baptised as 238854bk1.
>
> The additional step I needed was:  from the output of Bill's function,
> say e0,  you take e0.c4 and e0.c6, round them to get c4,c6 and then
> return ellminimalmodel([0,0,0,-27*c4,-54*c6]).  To cut out the middle
> step, just define c4=12*g2=12*elleisnum(om,4,1),
> c6=216*g3=216*elleisnum(om,6,1).  the scaling factors 12,216 are on
> page 45 of my book.  Hence:
>
> x=0.0017237131288014931634375894696418139876
> y=0.0088075252675047227730811538038700492673
> om=92*x,x+y*I]
> ellminimalmodel(ellinit([0,0,0,-27*round(12*elleisnum(om,4,1)),-54*round(216*elleisnum(om,6,1))]))
>
> returns [1, 1, 1, -229872576744, -42424810617266967,...]

Funny. The whole point of elleisnum(..., flag = 1) is to activate
the following code snippet:

else if (k==4 && flag) y = gdivgs(y,  12);
else if (k==6 && flag) y = gdivgs(y,-216);

which your code then gets rid of. Final shortcut:

x  = 0.0017237131288014931634375894696418139876;
y  = 0.0088075252675047227730811538038700492673;
om = [2*x,x+y*I];
ellminimalmodel(ellinit([-27*round(elleisnum(om,4)),54*round(elleisnum(om,6))]))

:-)

Cheers,

K.B.
--
Karim Belabas, IMB (UMR 5251)  Tel: (+33) (0)5 40 00 26 17
Universite Bordeaux 1          Fax: (+33) (0)5 40 00 69 50
351, cours de la Liberation    http://www.math.u-bordeaux1.fr/~belabas/
F-33405 Talence (France)       http://pari.math.u-bordeaux1.fr/  [PARI/GP]
`

```