\\ Copyright (c) 2003 Henri Darmon and Adam Logan fpcoefs(nf,v,p)= { local(i,t,w2,w3); t=reductions(nf,v,p); print(t); w2=[]; for(i=1,length(t),if(poldegree(t[i][2])==1,w2=concat(w2,[t[i][1]]),)); /* Now we've built the list of things to count. */ w3=[vector(length(w2),i,q=w2[i];ellap(ellinit(q),p)),p]; return(w3); } reductions(nf,v,p)= { local(nfpdec,nfredp,nfmodppols,i,a,j,w); nfpdec=idealprimedec(nf,p); nfredp=vector(length(nfpdec),i,nfmodprinit(nf,nfpdec[i])); /* Time to extract the polynomials to mod out by from the nfmodprinit information. */ nfmodppols=vector(length(nfpdec),i,a=nfeltpowmodpr(nf,nf[7][2],nfpdec[i][4],nfredp[i]);x^nfpdec[i][4]-sum(j=1,nfpdec[i][4],x^(j-1)*lift(a[j]))); w=vector(length(nfpdec),i,[Mod(modpol(v,p),nfmodppols[i]),nfmodppols[i]]); for(i=1,length(w),if(poldegree(nfmodppols[i])==1,w[i]=lift(w[i]),)); return(w); } modpol(v,p)= vector(length(v),i,if(poldegree(v[i])==0,Mod(v[i],p),sum(j=0,poldegree(v[i]),Mod(polcoeff(v[i],j),p)*variable(v[i])^j))); fptest(nf,p)= { local(w,w1,w2,w3,z); w=simplify(lift(reductions(nf,[1,0,5*x+11,0,0],p))); w1= lift([[[Mod(1, p), 0, Mod(1, p), 0, 0], x - 2], [[Mod(1, p), 0, Mod(1, p), 0, 0], x - 4]]); if(w1[1][1]==w[1][1],print("equal"),print("not equal")); print(w1); print(w); w2=[]; for(i=1,length(w),if(poldegree(w[i][2])==1,w2=concat(w2,[w[i][1]]),)); z=[[1, 0, 1, 0, 0], [1, 0, 1, 0, 0]]; if(w2==z,print("equal"),print("not equal")); w3=[vector(length(w2),i,ellap(ellinit(w2[i]),p)),p]; return(w3); }