Finite fields of characteristic 2 - Finite Rings

Skip to content
Back to top
View this page
Edit this page

# 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: `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` – a minimal polynomial to use for reduction

  - `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

      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(6397)
      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

  Python

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

  characteristic()

    Return the characteristic of `self` which is 2.

    EXAMPLES:

    Sage

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

    Python

        >>> from sage.all import *
        >>> k = GF(Integer(2)**Integer(16),modulus='random', names=('a',)); (a,) = k._first_ngens(1)
        >>> k.characteristic()
        2

  degree()

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

    EXAMPLES:

    Sage

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

    Python

        >>> from sage.all import *
        >>> k = GF(Integer(2)**Integer(64), names=('a',)); (a,) = k._first_ngens(1)
        >>> k.degree()
        64

    See also

    `absolute_degree()`

  from_integer(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` – integer

    EXAMPLES:

    Sage

        sage: k.<a> = GF(2^48)
        sage: k.from_integer(2^43 + 2^15 + 1)
        a^43 + a^15 + 1
        sage: k.from_integer(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]

    Python

        >>> from sage.all import *
        >>> k = GF(Integer(2)**Integer(48), names=('a',)); (a,) = k._first_ngens(1)
        >>> k.from_integer(Integer(2)**Integer(43) + Integer(2)**Integer(15) + Integer(1))
        a^43 + a^15 + 1
        >>> k.from_integer(Integer(33793))
        a^15 + a^10 + 1
        >>> Integer(33793).digits(Integer(2)) # little endian
        [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]

  gen(n=0)

    Return a generator of `self` over its prime field, which is a root of `self.modulus()`.

    INPUT:

    - `n` – must be 0

    OUTPUT:

    An element \(a\) of `self` such that `self.modulus()(a) == 0`.

    Warning

    This generator is not guaranteed to be a generator for the multiplicative group. To obtain the latter, use `multiplicative_generator()` or use the `modulus="primitive"` option when constructing the field.

    EXAMPLES:

    Sage

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

    Python

        >>> from sage.all import *
        >>> k = GF(Integer(2)**Integer(19), names=('a',)); (a,) = k._first_ngens(1)
        >>> k.gen() == a
        True
        >>> a
        a

  order()

    Return the cardinality of this field.

    EXAMPLES:

    Sage

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

    Python

        >>> from sage.all import *
        >>> k = GF(Integer(2)**Integer(64), names=('a',)); (a,) = k._first_ngens(1)
        >>> k.order()
        18446744073709551616

  prime_subfield()

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

    EXAMPLES:

    Sage

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

    Python

        >>> from sage.all import *
        >>> F = GF(Integer(2)**Integer(16), names=('a',)); (a,) = F._first_ngens(1)
        >>> 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: 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

  Python

      >>> from sage.all import *
      >>> sage.rings.finite_rings.finite_field_ntl_gf2e.late_import()
      >>> sage.rings.finite_rings.finite_field_ntl_gf2e.GF2 is None # indirect doctest
      False