Finite fields that are implemented using Zech logs and the
cardinality must be less than . By default, conway polynomials are
used as minimal polynomial.
Bases: sage.rings.finite_rings.finite_field_base.FiniteField
Finite field implemented using Zech logs and the cardinality must be
less than . By default, conway polynomials are used as minimal
polynomials.
INPUT:
OUTPUT:
Givaro finite field with characteristic and cardinality
.
EXAMPLES:
By default conway polynomials are used:
sage: k.<a> = GF(2**8)
sage: -a ^ k.degree()
a^4 + a^3 + a^2 + 1
sage: f = k.modulus(); f
x^8 + x^4 + x^3 + x^2 + 1
You may enforce a modulus:
sage: P.<x> = PolynomialRing(GF(2))
sage: f = x^8 + x^4 + x^3 + x + 1 # Rijndael Polynomial
sage: k.<a> = GF(2^8, modulus=f)
sage: k.modulus()
x^8 + x^4 + x^3 + x + 1
sage: a^(2^8)
a
You may enforce a random modulus:
sage: k = GF(3**5, 'a', modulus='random')
sage: k.modulus() # random polynomial
x^5 + 2*x^4 + 2*x^3 + x^2 + 2
Three different representations are possible:
sage: sage.rings.finite_rings.finite_field_givaro.FiniteField_givaro(9,repr='poly').gen()
a
sage: sage.rings.finite_rings.finite_field_givaro.FiniteField_givaro(9,repr='int').gen()
3
sage: sage.rings.finite_rings.finite_field_givaro.FiniteField_givaro(9,repr='log').gen()
1
Return a*b - c.
INPUT:
EXAMPLES:
sage: k.<a> = GF(3**3)
sage: k.a_times_b_minus_c(a,a,k(1))
a^2 + 2
Return a*b + c. This is faster than multiplying a and b first and adding c to the result.
INPUT:
EXAMPLES:
sage: k.<a> = GF(2**8)
sage: k.a_times_b_plus_c(a,a,k(1))
a^2 + 1
Return c - a*b.
INPUT:
EXAMPLES:
sage: k.<a> = GF(3**3)
sage: k.c_minus_a_times_b(a,a,k(1))
2*a^2 + 1
Return the characteristic of this field.
EXAMPLES:
sage: p = GF(19^5,'a').characteristic(); p
19
sage: type(p)
<type 'sage.rings.integer.Integer'>
If the cardinality of self is , then this returns
.
OUTPUT:
Integer – the degree
EXAMPLES:
sage: GF(3^4,'a').degree()
4
Given an integer return a finite field element in self
which equals
under the condition that gen() is set to
characteristic().
EXAMPLES:
sage: k.<a> = GF(2^8)
sage: k.fetch_int(8)
a^3
sage: e = k.fetch_int(151); e
a^7 + a^4 + a^2 + a + 1
sage: 2^7 + 2^4 + 2^2 + 2 + 1
151
Return a generator of self.
All elements x of self are expressed as
internally where
is the generator of self.
This generator might differ between different runs or different architectures.
Warning
The generator is not guaranteed to be a generator for the multiplicative group. To obtain the latter, use multiplicative_generator().
EXAMPLES:
sage: k = GF(3^4, 'b'); k.gen()
b
sage: k.gen(1)
Traceback (most recent call last):
...
IndexError: only one generator
sage: F = sage.rings.finite_rings.finite_field_givaro.FiniteField_givaro(31)
sage: F.gen()
1
Given an integer this method returns
where
satisfies
where
is the generator and
is the
characteristic of self.
INPUT:
OUTPUT:
log representation of n
EXAMPLES:
sage: k = GF(7**3, 'a')
sage: k.int_to_log(4)
228
sage: k.int_to_log(3)
57
sage: k.gen()^57
3
Given an integer this method returns i where i
satisfies
where
is the generator of self; the
result is interpreted as an integer.
INPUT:
OUTPUT:
integer representation of a finite field element.
EXAMPLES:
sage: k = GF(2**8, 'a')
sage: k.log_to_int(4)
16
sage: k.log_to_int(20)
180
Return the cardinality of this field.
OUTPUT:
Integer – the number of elements in self.
EXAMPLES:
sage: n = GF(19^5,'a').order(); n
2476099
sage: type(n)
<type 'sage.rings.integer.Integer'>
Return the defining polynomial of this field as an element of PolynomialRing.
This is the same as the characteristic polynomial of the generator of self.
INPUT:
EXAMPLES:
sage: k = GF(3^4, 'a')
sage: k.polynomial()
a^4 + 2*a^3 + 2
Return the prime subfield of self if self is
.
EXAMPLES:
sage: GF(3^4, 'b').prime_subfield()
Finite Field of size 3
sage: S.<b> = GF(5^2); S
Finite Field in b of size 5^2
sage: S.prime_subfield()
Finite Field of size 5
sage: type(S.prime_subfield())
<class 'sage.rings.finite_rings.finite_field_prime_modn.FiniteField_prime_modn_with_category'>
Return a random element of self.
EXAMPLES:
sage: k = GF(23**3, 'a')
sage: e = k.random_element(); e
2*a^2 + 14*a + 21
sage: type(e)
<type 'sage.rings.finite_rings.element_givaro.FiniteField_givaroElement'>
sage: P.<x> = PowerSeriesRing(GF(3^3, 'a'))
sage: P.random_element(5)
2*a + 2 + (a^2 + a + 2)*x + (2*a + 1)*x^2 + (2*a^2 + a)*x^3 + 2*a^2*x^4 + O(x^5)