//Calcul du p-rang de X(q) prang:=function(p,q) PR:=PolynomialRing(IntegerRing()); PG:=PolynomialRing(GF(p)); II:=IntegerRing(); F:=CyclotomicField(EulerPhi(q)); G:=DirichletGroup(q,F); L:=Elements(G); LP:=1;LPL:=[]; for x in L do if IsEven(x) then M:=ModularSymbols(x,2,+1); C:=CuspidalSubspace(M); P:=CharacteristicPolynomial(HeckeOperator(C,p)); LP:=LP*P; LPL:=Append(LPL,P); end if; end for; Pf1:=PR!LP; Pf1:=PG!Pf1; M:=ModularSymbols(q,2,+1); C:=CuspidalSubspace(M); P:=CharacteristicPolynomial(HeckeOperator(C,p)); Pf2:=PR!P; Pf2:=PG!Pf2; M:=ModularSymbols(q^2,2,+1); C:=CuspidalSubspace(M); P:=CharacteristicPolynomial(HeckeOperator(C,p)); Pf3:=PR!P; Pf3:=PG!Pf3; pr:=(Degree(Pf1)-Valuation(Pf1))+(q-1)/2*((Degree(Pf3)-Valuation(Pf3))-(Degree(Pf2)-Valuation(Pf2))); return pr; end function;