The following lines of code generate a set W of minimal polynomials
for the so-called Gaussian periods
where
is a primitive l-th root of unity (l is prime),
and where g is a primitive root modulo l. These
have the property that they generate a degree d cyclic subfield of
.
> R<x> := PolynomialRing(RationalField());
> MinPolGaussianPeriod := function(l, d)
> L<z> := CyclotomicField(l);
> g := PrimitiveRoot(l);
> g_d := Modexp(g, d, l);
> w := &+[z ^ Modexp(g_d, i, l) : i in [0..((l-1) div d - 1)] ];
> return MinimalPolynomial(w);
> end function;
> // compute for l = 13
> { MinPolGaussianPeriod(13, d) : d in Divisors(12) };
{
x^12 + x^11 + x^10 + x^9 + x^8 + x^7 + x^6 + x^5 + x^4 + x^3 + x^2 + x + 1,
x^4 + x^3 + 2*x^2 - 4*x + 3,
x^3 + x^2 - 4*x + 1,
x + 1,
x^2 + x - 3,
x^6 + x^5 - 5*x^4 - 4*x^3 + 6*x^2 + 3*x - 1
}
We illustrate some of the general number field functions by
computing some invariants for the first few cubic fields generated
with the above function for Gaussian periods.
For each of the cyclotomic fields
, with p<200 prime,
and
, the cyclic cubic subfield is generated.
We list its signature (i.e. the degree, and the number of real and complex
embeddings), the field discriminant, the Minkowski bound on the
norms of ideals generating the class group, the order of the ideal class
group, the index in the ring of integers
of the order generated by a root of the field
polynomial, and this polynomial itself.
In the code below, the calculation of the ring of integers is done using KANT's `Round-2' algorithm. The class number is calculated with a relation method, using the Minkowski bound, and with verification of the correctness of the result turned off (for speed).
> P<y> := PolynomialRing(IntegerRing()); > "conductor signature\tdisc\tMink\tclassno index\t minimalpoly"; > for l := 7 to 200 by 3 do > L<z> := CyclotomicField(l); > if not IsPrime(l) then > continue; > end if; > d := 3; > f := MinPolGaussianPeriod(l, d); > K := NumberField(f); > O := IntegerRing(K); > I := Index(O, EquationOrder(K)); > h := ClassNumber(K: > Bound := MinkowskiBound(K), Check := false); > print " ", l, "\t ", d, Signature(K), "\t", Discriminant(K), "\t", > MinkowskiBound(K), "\t", h, "\t", I, "\t", f; > end for; conductor signature disc Mink classno index minimalpoly 7 3 3 0 49 2 1 1 x^3 + x^2 - 2*x - 1 13 3 3 0 169 3 1 1 x^3 + x^2 - 4*x + 1 19 3 3 0 361 5 1 1 x^3 + x^2 - 6*x - 7 31 3 3 0 961 7 1 2 x^3 + x^2 - 10*x - 8 37 3 3 0 1369 9 1 1 x^3 + x^2 - 12*x + 11 43 3 3 0 1849 10 1 2 x^3 + x^2 - 14*x + 8 61 3 3 0 3721 14 1 3 x^3 + x^2 - 20*x - 9 67 3 3 0 4489 15 1 3 x^3 + x^2 - 22*x + 5 73 3 3 0 5329 17 1 3 x^3 + x^2 - 24*x - 27 79 3 3 0 6241 18 1 1 x^3 + x^2 - 26*x + 41 97 3 3 0 9409 22 1 1 x^3 + x^2 - 32*x - 79 103 3 3 0 10609 23 1 3 x^3 + x^2 - 34*x - 61 109 3 3 0 11881 25 1 4 x^3 + x^2 - 36*x - 4 127 3 3 0 16129 29 1 2 x^3 + x^2 - 42*x + 80 139 3 3 0 19321 31 1 1 x^3 + x^2 - 46*x + 103 151 3 3 0 22801 34 1 3 x^3 + x^2 - 50*x - 123 157 3 3 0 24649 35 1 4 x^3 + x^2 - 52*x + 64 163 3 3 0 26569 37 4 1 x^3 + x^2 - 54*x - 169 181 3 3 0 32761 41 1 5 x^3 + x^2 - 60*x - 67 193 3 3 0 37249 43 1 3 x^3 + x^2 - 64*x + 143 199 3 3 0 39601 45 1 5 x^3 + x^2 - 66*x + 59
Next Group: Imprimitive degree 9 fields Previous Group: Kloosterman's sum
Up: Number fields