| Bill Allombert on Fri, 2 Apr 1999 15:31:46 +0200 (MET DST) |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: idealstar() |
The bug is in zprimestar:
this function only handles correctly :
_the case p<<2^32
_the case f=pr[4]=1
So idealstar(K,2^61-1) works (f=1)
but not
idealstar(K,2^31-1) nor idealstar(K,2^31+129) (f=4)
--------base3.c--1151---
zprimestar(GEN nf,GEN pr,GEN ep,GEN x,GEN arch)
{
long av=avma,av1,N,f,nbp,j,n,m,tetpil,i,e,a,b;
GEN prh,p,pefm1,list,v,p1,p2,p3,p4,prk,uv,g0,newgen,pra,prb;
GEN *gptr[2];
if(DEBUGLEVEL>=4)
{ fprintferr("on traite pr = %Z ^ %Z\n",(long)pr,(long)ep); flusherr(); }
prh=prime_to_ideal(nf,pr); N=lg(prh)-1;
f=itos((GEN)pr[4]); p=(GEN)pr[1];
pefm1 = addis(gpowgs(p,f), -1);
if(DEBUGLEVEL>=4) {fprintferr("prh etc... calcule\n");flusherr();}
v = zerocol(N);
if (f==1) v[1]=gener(p)[2];
-----^^^^^^----------------------------f==1:OK
else
{
GEN prhall = cgetg(3,t_VEC);
long psim = itos(p);
----------------^^^^------------------------------itos: p<2^31-1
list = (GEN)factor(pefm1)[1]; nbp=lg(list)-1;
prhall[1]=(long)prh; prhall[2]=zero;
for (n=psim; ; n++)
__________^^^^^^^^^^^^______________________p<2^31-1 may be too large
{
m=n;
for (i=1; i<=N; i++)
g if (!gcmp1(gcoeff(prh,i,i))) { v[i]=lstoi(m%psim); m/=psim; }
for (j=1; j<=nbp; j++)
{
p1 = divii(pefm1,(GEN)list[j]);
p1 = lift_intern(element_powmodpr(nf,v,p1,prhall));
if (isnfscalar(p1) && gcmp1((GEN)p1[1])) break;
}
if (j>nbp) break;
}
Bill