When the output is too big, I will not display it in the solutions. The numbering of the commands starts back to %1 at every point of the exercise for aesthetic reasons, even if it does not make sense. EXERCISE 1 --------------------------- f=x^6-2*x^4-9*x^3+16*x^2+24*x+24 --------------------------- Point (1) --------------------------- ? factor(f) %1 = [x^6 - 2*x^4 - 9*x^3 + 16*x^2 + 24*x + 24 1] ? L=nfinit(f) --------------------------- Point (2) --------------------------- ? polgalois(f) %1 = [12, -1, 1, "D(6) = S(3)[x]2"] Since deg(f)=6, the extension L is not Galois over Q. Its Galois closure has Galois group isomorphic to the dihedral group D6 of order 12. ? nfsplitting(f) %2 = x^12 + 8*x^10 + 24*x^8 + 1190*x^6 + 4648*x^4 + 4632*x^2 + 9801 ? polredbest(%) %3 = x^12 - 4*x^11 - 11*x^10 + 82*x^9 - 73*x^8 - 458*x^7 + 1531*x^6 - 2320*x^5 + 2683*x^4 - 390*x^3 - 5847*x^2 + 3366*x + 4356 ? g=% --------------------------- Point (3) --------------------------- ? h=x^3-x^2-x+4 %1 = x^3 - x^2 - x + 4 ? nfisincl(h,f) %2 = [-1/132*x^5 - 4/33*x^4 + 5/66*x^3 + 37/132*x^2 + 4/11*x - 15/11] Since the output of nfisincl is non-zero, the number field with generating polynomial h is isomorphic to a subfield of L. ? nfsubfields(L) %3 = [[x, 0], [x^2 - 9*x + 24, 4/33*x^5 - 2/33*x^4 - 7/33*x^3 - 16/33*x^2 + 24/11*x + 64/11], [x^3 + 8*x^2 + 16*x - 24, 1/66*x^5 + 8/33*x^4 - 5/33*x^3 - 37/66*x^2 - 8/11*x + 8/11], [x^6 - 2*x^4 - 9*x^3 + 16*x^2 + 24*x + 24, x]] The command above shows that there are two non-trivial subfields of L, one of degree 2 and one of degree 3. Since L is not Galois by point (2), it must be the fixed field of one of the two non-normal cyclic subgroups C_2 of D_6 (look at the subgroups lattice). Such a subgroup is in turn contained in a subgroup isomorphic to C_2 x C_2 (non-normal in D_6) and in a subgroup isomorphic to S_3 (normal in D_6) . The first one, corresponds to the non-normal degree 3 subextension of L, the second one correspond to the normal degree 2 subextension of L. --------------------------- Point (4) --------------------------- ? L2=bnfinit(f); L.zk %1 = [1, 1/132*x^5 + 4/33*x^4 - 5/66*x^3 - 37/132*x^2 - 4/11*x + 15/11, x, -1/33*x^5 + 1/66*x^4 + 10/33*x^3 + 4/33*x^2 - 23/22*x - 16/11, 4/33*x^5 - 2/33*x^4 - 7/33*x^3 - 16/33*x^2 + 24/11*x + 9/11, -4/33*x^5 + 2/33*x^4 + 7/33*x^3 + 49/33*x^2 - 24/11*x - 20/11] This computes the ring of integers. We need bnfinit for computations involving the class group. ? L2.no %2 = 10 ? L2.cyc %3 = [10] The first command shows that the class number is 10, the second command shows that the class group of L is cyclic of order 10. To find ideals of order 5 in the class group, we simply note that these must be in the same class of the square of the generator of Cl(L). We write then the following function: Orderfive(n) = { forprime(p=1,n, dec=idealprimedec(L2,p); for(i=1,#dec, frakp=dec[i]; if(bnfisprincipal(L2,frakp)[1][1]==2, print(frakp)) ) ) } We find at least 10 prime ideals of order 5 by computing for instance Orderfive(200) --------------------------- Point (5) --------------------------- For the rank of the unit group we compute the signature of the number field. ? L2.sign %1 = [0, 3] The rank is given by (real embeddings)+(pairs of complex embeddings)-1=2. For the torsion, we look at which cyclotomic fields are contained in L. Since cyclotomic fields are Galois, the only possible cyclotomic field contained in L is its unique quadratic subfield. The only quadratic cyclotomic fields are Q(i) and Q(zeta3). This justifies the following code: ? nfisisom(x^2+1,x^2 - 9*x + 24) %2 = 0 ? nfisisom(x^2+x+1,x^2 - 9*x + 24) %3 = 0 Hence the torsion in the unit group is just +-1. We verify everything in PARI: ? #L2.fu %4 = 2 ? [lift(L2.fu[1]),lift(L2.fu[2])] %5 = [31/132*x^5 - 8/33*x^4 - 23/66*x^3 - 223/132*x^2 + 63/11*x + 14/11, -3/11*x^5 + 3/22*x^4 + 8/11*x^3 + 23/11*x^2 - 119/22*x - 56/11] ? L2.tu %6 = [2, -1] --------------------------- Point (6) --------------------------- The following function computes the desired ratio for arbitrary large x Ratio(x) = { my(n=0,m=0); forprime(p=1,x, m=m+1; if(#idealprimedec(L2,p)==6,n=n+1) ); return(n/m); }