| Karim BELABAS on Wed, 20 Jan 1999 18:17:16 +0100 (MET) |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: Bug in ellap (?) |
[Francois Morain:]
> I have found a strange thing about ellap. As is well known, when
> E:Y^2=X^3+aX with p = 3 mod 4, then ap = 0. Yet, trying the following:
>
> {bug(nmin, nmax, p)=
> for(n = nmin, nmax,
> p = 10^n+3;
> while(isprime(p) == 0, p = p+4);
> print("n=", n, " p=", p, " -> ",ellap(ellinit([0,0,0,2,0]),p));
> );
> }
the following looks slightly better (needs 2.0.13).
{bug(nmin, nmax)= local(e, p);
e = ellinit([0,0,0,2,0]);
for(n = nmin, nmax,
p = 10^n+3;
while(!isprime(p), p += 4);
print("n=" n "\tp=" p "\t-> " ellap(e,p));
);
}
> I got: [...]
> ? bug(2, 20) [...]
> n=10 p=10000000019 -> 1
> [...]
> What happened?
Off-by-1 error...
> Any idea? Related to p getting too large (> 2^31)???
Yup, a different routine gets called if p < 0x3fffffff
Karim.
*** src/modules/elliptic.c.orig Tue Dec 15 16:30:35 1998
--- src/modules/elliptic.c Wed Jan 20 18:00:20 1999
***************
*** 1577,1583 ****
h=addii(h,mulsi(j2,bcon)); p2=mulsi(s,mulsi(com,bcon));
h=(egalii(gmael(p1,2,2),gmael(ftest,2,2))) ? subii(h,p2) :
addii(h,p2);
}
! else h=addii(h,mulsi(i-1,bcon));
p2=factor(h);
p1=(GEN)p2[1]; p2=(GEN)p2[2];
for (i=1; i<lg(p1); i++)
--- 1577,1583 ----
h=addii(h,mulsi(j2,bcon)); p2=mulsi(s,mulsi(com,bcon));
h=(egalii(gmael(p1,2,2),gmael(ftest,2,2))) ? subii(h,p2) :
addii(h,p2);
}
! else h=addii(h,mulsi(i,bcon));
p2=factor(h);
p1=(GEN)p2[1]; p2=(GEN)p2[2];
for (i=1; i<lg(p1); i++)
--
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://pari.home.ml.org