B=100; default(seriesprecision, B); eisen(k)={ local(be); be=bernvec(k/2); return(Ser(1-2*k/be[k/2+1]*sum(j=1,B,sigma(j,k-1)*q^j ), q)); } hecke(se, n, k) = { local(ans,sprec); sprec=length(se); ans=polcoeff(se, 0, q)*sigma(n, k-1)+O(q^sprec); for(j=1, floor(sprec/n)-1, divs = divisors(gcd(j, n)); ans += q^j*sum(jj=1, #divs, divs[jj]^(k-1) * polcoeff(se, j*n/divs[jj]^2,q)); ); return(ans+O(q^(floor(sprec/n)))); } coefs(elt, basi)= { local(m,l); l=length(basi); m=matrix(l,l,aa,bb,polcoeff(basi[bb], aa, q)); if(matdet(m)==0, print("Det is 0 ", m); 1/0); return((1/m)*(vector(l,h, polcoeff(elt, h, q))~)); } domat(n, k, bas)= { local(vecs); vecs=vector(#bas, h, coefs(hecke(bas[h], n, k),bas)); return(Mat(vecs)); } dopoly(n, k, bas)= charpoly(domat(n,k,bas)) delt()=q*eta(q)^24 e4()=eisen(4) e6()=eisen(6) /* bas=[delt()*delt(), delt()*e4()^3]; */