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
-