Finite Fields of Characteristic 2

class sage.rings.finite_rings.finite_field_ntl_gf2e.FiniteField_ntl_gf2e(q, names='a', modulus=None, repr='poly')

Bases: sage.rings.finite_rings.finite_field_base.FiniteField

Finite Field of characteristic 2 and order \(2^n\).

INPUT:

  • q\(2^n\) (must be 2 power)

  • names – variable used for poly_repr (default: 'a')

  • modulus – you may provide a polynomial to use for reduction or a string:

    • 'conway' – force the use of a Conway polynomial, will raise a RuntimeError if None is found in the database;
    • 'minimal_weight' – use a minimal weight polynomial, should result in faster arithmetic;
    • 'random' – use a random irreducible polynomial.
    • 'default' – a Conway polynomial is used if found. Otherwise a sparse polynomial is used.
  • repr – controls the way elements are printed to the user:

    (default: 'poly')

    • 'poly': polynomial representation

OUTPUT:

Finite field with characteristic 2 and cardinality \(2^n\).

EXAMPLES:

sage: k.<a> = GF(2^16)
sage: type(k)
<class 'sage.rings.finite_rings.finite_field_ntl_gf2e.FiniteField_ntl_gf2e_with_category'>
sage: k.<a> = GF(2^1024)
sage: k.modulus()
x^1024 + x^19 + x^6 + x + 1
sage: set_random_seed(0)
sage: k.<a> = GF(2^17, modulus='random')
sage: k.modulus()
x^17 + x^16 + x^15 + x^10 + x^8 + x^6 + x^4 + x^3 + x^2 + x + 1
sage: k.modulus().is_irreducible()
True
sage: k.<a> = GF(2^211, modulus='minimal_weight')
sage: k.modulus()
x^211 + x^11 + x^10 + x^8 + 1
sage: k.<a> = GF(2^211, modulus='conway')
sage: k.modulus()
x^211 + x^9 + x^6 + x^5 + x^3 + x + 1
sage: k.<a> = GF(2^23, modulus='conway')
sage: a.multiplicative_order() == k.order() - 1
True
characteristic()

Return the characteristic of self which is 2.

EXAMPLES:

sage: k.<a> = GF(2^16,modulus='random')
sage: k.characteristic()
2
degree()

If this field has cardinality \(2^n\) this method returns \(n\).

EXAMPLES:

sage: k.<a> = GF(2^64)
sage: k.degree()
64
fetch_int(number)

Given an integer \(n\) less than cardinality() with base \(2\) representation \(a_0 + 2 \cdot a_1 + \cdots + 2^k a_k\), returns \(a_0 + a_1 \cdot x + \cdots + a_k x^k\), where \(x\) is the generator of this finite field.

INPUT:

  • number – an integer

EXAMPLES:

sage: k.<a> = GF(2^48)
sage: k.fetch_int(2^43 + 2^15 + 1)
a^43 + a^15 + 1
sage: k.fetch_int(33793)
a^15 + a^10 + 1
sage: 33793.digits(2) # little endian
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]
gen(ignored=None)

Return a generator of self.

EXAMPLES:

sage: k.<a> = GF(2^19)
sage: k.gen() == a
True
sage: a
a
order()

Return the cardinality of this field.

EXAMPLES:

sage: k.<a> = GF(2^64)
sage: k.order()
18446744073709551616
polynomial(name=None)

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:

name – optional variable name

EXAMPLES:

sage: k.<a> = GF(2^20)
sage: k.polynomial()
a^20 + a^10 + a^9 + a^7 + a^6 + a^5 + a^4 + a + 1
sage: k.polynomial('FOO')
FOO^20 + FOO^10 + FOO^9 + FOO^7 + FOO^6 + FOO^5 + FOO^4 + FOO + 1
sage: a^20
a^10 + a^9 + a^7 + a^6 + a^5 + a^4 + a + 1
prime_subfield()

Return the prime subfield \(\GF{p}\) of self if self is \(\GF{p^n}\).

EXAMPLES:

sage: F.<a> = GF(2^16)
sage: F.prime_subfield()
Finite Field of size 2
sage.rings.finite_rings.finite_field_ntl_gf2e.late_import()

Imports various modules after startup.

EXAMPLES:

sage: sage.rings.finite_rings.finite_field_ntl_gf2e.late_import()
sage: sage.rings.finite_rings.finite_field_ntl_gf2e.GF2 is None # indirect doctest
False

Previous topic

Givaro Finite Field

Next topic

Finite fields implemented via PARI’s FFELT type

This Page