| Karim BELABAS on Sun, 26 Aug 2001 18:20:54 +0200 (MEST) |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: Bug in apell? |
On Wed, 8 Aug 2001, John Cremona wrote:
> The code
>
> e=ellinit([0, 460397952, 0, 275613539, 0],1)
> q=1185848623
> ellap(e,q)
>
> does not return a value after a long time (on either a 32 or a 64 bit
> machine). The next prime q=1185848627 returns a value (67460)
> instantly.
>
> This came up in the middle of a big run where millions of curves had
> their points counted (literally), and this is the only example which
> caused a problem.
>
> Any ideas where the problem lies? According to magma the correct answer
> (for the problem prime 1185848623) is -36184, and the group order is
> 1185884808 = (2^3)*(3)*(49411867).
There was a bug in the sorting phase of BS/GS (routine apell1()), due to an array
length being incorrectly updated.
[analysis and fix provided by Mark Dickinson; patch applies to versions 2.1 or
more recent]
Cheers,
Karim.
diff -c -r1.23 -r1.24
*** src/modules/elliptic.c 2001/07/07 11:11:57 1.23
--- src/modules/elliptic.c 2001/08/26 07:21:25 1.24
***************
*** 1464,1474 ****
/* look for h s.t f^h = 0 */
if (bcon == gun)
{ /* first time: initialize */
! tx = newbloc(s+1); *tx = evaltyp(t_VECSMALL) | evallg(s+1);
ty = newbloc(s+1);
ti = newbloc(s+1);
}
else f = powsell(cp4,f,bcon,p); /* F */
if (!fh) goto FOUND;
p1 = gcopy(fh);
--- 1464,1475 ----
/* look for h s.t f^h = 0 */
if (bcon == gun)
{ /* first time: initialize */
! tx = newbloc(s+1);
ty = newbloc(s+1);
ti = newbloc(s+1);
}
else f = powsell(cp4,f,bcon,p); /* F */
+ *tx = evaltyp(t_VECSMALL) | evallg(s+1);
if (!fh) goto FOUND;
p1 = gcopy(fh);
--
Karim Belabas email: Karim.Belabas@math.u-psud.fr
Dep. de Mathematiques, Bat. 425
Universite Paris-Sud Tel: (00 33) 1 69 15 57 48
F-91405 Orsay (France) Fax: (00 33) 1 69 15 60 19
--
PARI/GP Home Page: http://www.parigp-home.de/