Cuerpos finitos

Cuerpos finitos.

Este módulo permite operar con elementos de un cuerpos finito de q elementos, donde q será la potencia de un primo.

Para utilizar las funciones y las clases de este módulo, debe importarlo previamente:

# reemplace ... por la función/clase que desea utilizar
from ccepy.cuerpos_finitos import ...

Para operar con elementos de un cuerpo finito con q elementos, use la función Fq() y los operadores aritméticos habituales.

>>> F16 = Fq(2, 4)
>>> F16([1, 1, 0, 1]) + F16([1, 0, 0, 1])
{[0, 1, 0, 0]; 16}
>>> F16([1, 0, 1, 1]) * F16([1, 0, 0, 1])
{[1, 0, 0, 0]; 16}
>>> F16([1, 1, 0, 1]) ** (-1)
{[0, 1, 0, 1]; 16}
>>> F16([0, 0, 1, 0]) ** 2
{[1, 0, 0, 1]; 16}

Se está utilizando la representación polinomial para los elementos de un cuerpo finito. En particular, para la creación y la representación de un elemento se utilizan los coeficientes del elemento visto como polinomio.

Lista de funciones y clases de cuerpos_finitos:

Fq Devuelve el constructor de elementos del cuerpo finito con p**n elementos.
ElementoFq Representa un elemento del cuerpo finito con q elementos.
Fq(p, n=1, pol_irreducible=None)[fuente]

Devuelve el constructor de elementos del cuerpo finito con p**n elementos.

>>> F16 = Fq(2, 4)
>>> F16
<class 'ccepy.cuerpos_finitos.Fq.<locals>.ElementoFq'>
>>> F16([0, 0, 0, 0, 1])
{[1, 0, 0, 1]; 16}

Se puede especificar el polinomio con el cual se hace módulo:

>>> pol_irreducible = PolinomioZp([1, 1, 1, 0, 1], p=2)
>>> pol_irreducible
X^4 + X^2 + X + 1
>>> F16 = Fq(2, 4, pol_irreducible)
>>> F16([0, 0, 0, 0, 1])  # X^4 mod X^4 + X^2 + X + 1
{[1, 1, 1, 0]; 16}
Parámetros:
  • p (int) – un número primo.
  • n (Optional[int]) – un número natural.
  • pol_irreducible (Optional[PolinomioZp]) – un polinomio de grado n irreducible.
Devuelve:

Si n es uno, devuelve EnteroModuloP.

Si n es mayor que uno, devuelve ElementoFq.

class ElementoFq(coeficientes)[fuente]

Representa un elemento del cuerpo finito con q elementos.

>>> F16 = Fq(2, 4)
>>> p, q = F16([1, 1, 0, 1]), F16([1, 0, 0, 1])
>>> type(p)
<class 'ccepy.cuerpos_finitos.Fq.<locals>.ElementoFq'>
>>> p
{[1, 1, 0, 1]; 16}
>>> q
{[1, 0, 0, 1]; 16}
>>> p + q
{[0, 1, 0, 0]; 16}
>>> p * q
{[1, 0, 1, 0]; 16}
>>> p ** (-1)
{[0, 1, 0, 1]; 16}

Soporta los operadores +, -, *, / y ** con su significado habitual.

Parámetros:coeficientes (List[int]) – los coeficientes del elemento visto como polinomio.
Zp

EnteroModuloP – el constructor de enteros módulo un primo p. (atributo de clase)

p

int – el primo p. (atributo de clase)

n

int – el grado del irreducible pol_irreducible. (atributo de clase)

q

int – el número de elementos del cuerpo finito. (atributo de clase)

classmethod cero()[fuente]

Devuelve el cero del cuerpo finito.

Devuelve:el cero.
Tipo del valor devuelto:
 ElementoFq
classmethod uno()[fuente]

Devuelve el uno del cuerpo finito.

Devuelve:el uno.
Tipo del valor devuelto:
 ElementoFq
inverso()[fuente]

Devuelve el inverso del elemento del cuerpo finito.

>>> F16 = Fq(2, 4)
>>> F16([1, 1, 0, 1]).inverso()
{[0, 1, 0, 1]; 16}
Devuelve:el inverso.
Tipo del valor devuelto:
 ElementoFq