Cuerpos finitos

Aritmética en cuerpos finitos de característica dos

Este módulo permite trabajar con cuerpos binarios. Para usar esta parte de la biblioteca se debe usar:

from ycurce.ffields import F2m

Para trabjar con :class: F2m debe hacerse de la siguiente manera:

>>> a, b = F2m(4, 7), F2m(3, 7)
>>> a + b
F[2**7](7)
>>> a * b
F[2**7](12)
>>> a.degree()
3

Lista de funciones y clases de cuerpos_finitos:

F2m

Representation de elementos en cuerpos de característica dos.

class F2m(n: int, m: int, gen: Optional[int] = None)[fuente]

Representation de elementos en cuerpos de característica dos. En esta clase se utilizan enteros para representar polinomios binarios. Para ello se utilizan los bits que representan al número como coeficientes del polinomio.

Además interviene un polinomio respecto al que se hacen reducciones módulo. La manera de instanciar la clase es por ejemploe:

F2m(3, 7)

En este caso se esta instanciando una clase que representa al polinomio tres en F_2^7. El polinomio que se utiliza para reducir es tomado de una lista precalculada.

Adevertencia: Esta lista tiene polinomios hasta grado 21. Si se supera este grado el usuario está encargado de proveer a la clase con un polinomio irreduble válido.

Variables
  • n – Entero que representa al polinomio que se instancia.

  • m – Potencia del cuerpo.

  • gen – Polinomio respecto al que se realizan reducciones módulo.

mul_without_reduction(x: int, y: int)[fuente]

Right to left comb method for pol multiplication Algorithm 2.33

full_division(f: int, v: int, f_degree: int, v_degree: int)Tuple[int, int][fuente]

Computes f(x) = a(x) * v(x) + b(x)

degree()int[fuente]

Obtiene el grado del polinomio asociado al entero de la instancia

inverse()ffield.F2m[fuente]

Calcula a ^ -1 mod f