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