## Rings of integers

computes rings of integers of number fields.
> RingOfIntegers(K);
Maximal Equation Order with defining polynomial x^3 - 2 over ZZ
> RingOfIntegers(L);
Maximal Equation Order with defining polynomial x^2 + [0, -1, 0]
over its ground order

Sometimes the ring of integers of isn't just . First a simple example, then a more complicated one:
> K<a> := NumberField(2*x^2-3);   // doesn't have to be monic
> 2*a^2 - 3;
0
> K;
Number Field with defining polynomial x^2 - 3/2 over the Rational
Field
> O := RingOfIntegers(K);
> O;
Maximal Order of Equation Order with defining polynomial 2*x^2 -
3 over ZZ
> Basis(O);
[
O.1,
O.2
]
> [K!x : x in Basis(O)];
[
1,
2*a       // this is Sqrt(3)
]

Here's are some more examples:
> procedure ints(f)   // (procedures don't return anything; functions do)
K<a> := NumberField(f);
O := MaximalOrder(K);
print [K!z : z in Basis(O)];
end procedure;
> ints(x^2-5);
[
1,
1/2*(a + 1)
]
> ints(x^2+5);
[
1,
a
]
> ints(x^3-17);
[
1,
a,
1/3*(a^2 + 2*a + 1)
]
> ints(CyclotomicPolynomial(7));
[
1,
a,
a^2,
a^3,
a^4,
a^5
]
> ints(x^5+&+[Random(10)*x^i : i in [0..4]]);  // RANDOM
[
1,
a,
a^2,
a^3,
a^4
]
> ints(x^5+&+[Random(10)*x^i : i in [0..4]]);  // RANDOM
[
1,
a,
a^2,
1/2*(a^3 + a),
1/16*(a^4 + 7*a^3 + 11*a^2 + 7*a + 14)
]

Lets find out how high of a degree can easily deal with.
> d := 10; time ints(x^10+&+[Random(10)*x^i : i in [0..d-1]]);
[
1, a, a^2, a^3, a^4, a^5, a^6, a^7, a^8, a^9
]
Time: 0.030
> d := 15; time ints(x^10+&+[Random(10)*x^i : i in [0..d-1]]);
[
1,
7*a,
7*a^2 + 4*a,
7*a^3 + 4*a^2 + 4*a,
7*a^4 + 4*a^3 + 4*a^2 + a,
7*a^5 + 4*a^4 + 4*a^3 + a^2 + a,
7*a^6 + 4*a^5 + 4*a^4 + a^3 + a^2 + 4*a,
7*a^7 + 4*a^6 + 4*a^5 + a^4 + a^3 + 4*a^2,
7*a^8 + 4*a^7 + 4*a^6 + a^5 + a^4 + 4*a^3 + 4*a,
7*a^9 + 4*a^8 + 4*a^7 + a^6 + a^5 + 4*a^4 + 4*a^2 + 5*a,
7*a^10 + 4*a^9 + 4*a^8 + a^7 + a^6 + 4*a^5 + 4*a^3 + 5*a^2 +  4*a,
...
]
Time: 0.480
> d := 20; time ints(x^10+&+[Random(10)*x^i : i in [0..d-1]]);
[
1,
2*a,
4*a^2,
8*a^3,
8*a^4 + 2*a^2 + a,
8*a^5 + 2*a^3 + 3*a^2,
...]
Time: 3.940
> d := 25; time ints(x^10+&+[Random(10)*x^i : i in [0..d-1]]);
... I stopped it after a few minutes...


We can also define orders in rings of integers.

> R<x> := PolynomialRing(RationalField());
> K<a> := NumberField(x^3-2);
> O := Order([2*a]);
> O;
Transformation of Order over
Equation Order with defining polynomial x^3 - 2 over ZZ
Transformation Matrix:
[1 0 0]
[0 2 0]
[0 0 4]
> OK := MaximalOrder(K);
> Index(OK,O);
8
> Discriminant(O);
-6912
> Discriminant(OK);
-108
> 6912/108;
64    // perfect square...


William Stein 2004-05-06