Aritmética elemental¶
Aritmética elemental con enteros y polinomios.
Este módulo permite operar con enteros módulo un primo p y polinomios cuyos coeficientes sean enteros módulo un primo p.
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.aritmetica_elemental import ...
Para operar con enteros módulo un primo p, use la función Zp()
y
los operadores aritméticos habituales.
>>> Z7 = Zp(7)
>>> n, m = Z7(2), Z7(6)
>>> n
2
>>> m
6
>>> n + m
1
>>> n * m
5
>>> m ** (-1)
6
Para operar con polinomios con coeficientes enteros módulo un primo p,
use la función PolinomioZp()
y los operadores aritméticos
habituales.
>>> f = PolinomioZp([0, 0, 1], p=2)
>>> f
X^2
>>> g = PolinomioZp([1, 1], p=2)
>>> g
X + 1
>>> f + g
X^2 + X + 1
>>> f * g
X^3 + X^2
>>> f ** 3
X^6
Lista de funciones y clases de aritmetica_elemental
:
Zp |
Devuelve el constructor de enteros módulo un primo p. |
EnteroModuloP |
Representa un entero módulo un primo p. |
PolinomioZp |
Representa un polinomio con coeficientes enteros módulo un primo p. |
alg_euclides |
Calcula el algoritmo extendido de Euclides para enteros. |
alg_euclides_polinomios |
Calcula el algoritmo extendido de Euclides para polinomios. |
-
Zp
(p)[fuente]¶ Devuelve el constructor de enteros módulo un primo p.
>>> Z2 = Zp(2) >>> Z2 <class 'ccepy.aritmetica_elemental.Zp.<locals>.EnteroModuloP'> >>> Z2(11) # 11 mod 2 1
Parámetros: p (int) – un número primo. Devuelve: la clase que representa los enteros módulo un primo p. Tipo del valor devuelto: EnteroModuloP
-
class
EnteroModuloP
(entero)[fuente]¶ Representa un entero módulo un primo p.
>>> Z7 = Zp(7) >>> n, m = Z7(2), Z7(6) >>> type(n) <class 'ccepy.aritmetica_elemental.Zp.<locals>.EnteroModuloP'> >>> n 2 >>> m 6 >>> n + m 1 >>> n * m 5 >>> m ** (-1) 6
Soporta los operadores
+
,-
,*
,/
y**
con su significado habitual.Los operandos pueden ser ambos de tipo
EnteroModuloP
o bien uno de tipoEnteroModuloP
y otro de tipoint
. En ambos casos el resultado será de tipoEnteroModuloP
.Parámetros: entero (int) – el valor del entero. -
p
¶ int – el primo p (atributo de clase).
-
classmethod
cero
()[fuente]¶ Devuelve el cero.
Devuelve: el cero. Tipo del valor devuelto: EnteroModuloP
-
classmethod
uno
()[fuente]¶ Devuelve el uno.
Devuelve: el uno. Tipo del valor devuelto: EnteroModuloP
-
inverso
()[fuente]¶ Devuelve el inverso módulo p.
>>> Z7 = Zp(7) >>> Z7(6).inverso() 6
Devuelve: el inverso. Tipo del valor devuelto: EnteroModuloP
-
-
class
PolinomioZp
(coeficientes, p)[fuente]¶ Representa un polinomio con coeficientes enteros módulo un primo p.
>>> f = PolinomioZp([0, 0, 1], p=2) >>> f X^2 >>> g = PolinomioZp([1, 1], p=2) >>> g X + 1 >>> f + g X^2 + X + 1 >>> f * g X^3 + X^2 >>> f ** 3 X^6
Soporta los operadores
+
,-
,*
,/
,%
y**
con su significado habitual.Los operandos pueden ser ambos de tipo
PolinomioZp
o bien uno de tipoPolinomioZp
y otro de tipoint
. En ambos casos el resultado será de tipoPolinomioZp
.Parámetros: - coeficientes (List[int]) – los coeficientes del polinomio ordenados de forma ascendente, esto es, el primero el término constante y el último el coeficiente líder.
- p (int) – el primo p.
-
coeficientes
¶ List[EnteroModuloP] – los coeficientes del polinomio ordenados de forma ascendente, esto es, el primero es el término constante y el último el coeficiente líder. Es un atributo de solo lectura.
-
classmethod
monomio
(coef, grado, p)[fuente]¶ Devuelve el monomio con coeficiente coef y de grado grado.
>>> PolinomioZp.monomio(-1, 7, 2) X^7
Parámetros: Devuelve: el monomio con dicho coeficiente y grado.
Tipo del valor devuelto:
-
grado
()[fuente]¶ Devuelve el grado del polinomio.
>>> f = PolinomioZp([1, 0, 0, 1], p=2) >>> f X^3 + 1 >>> f.grado() 3
El grado puede ser:
- -
math.inf
: si el polinomio es el polinomio cero. n
: si el término lider tiene exponente n.
Devuelve: el grado del polinomio. Tipo del valor devuelto: int - -
-
coeficiente_lider
()[fuente]¶ Devuelve el coeficiente asociado al término de mayor exponente.
>>> f = PolinomioZp([2, 0, 0, 1], p=3) >>> f X^3 + 2 >>> f.coeficiente_lider() 1
Devuelve: el coeficiente asociado al mayor exponente. Tipo del valor devuelto: EnteroModuloP
-
es_irreducible
()[fuente]¶ Comprueba si el polinomio es irreducible.
>>> f = PolinomioZp([1, 0, 1, 1], p=2) >>> f X^3 + X^2 + 1 >>> f.es_irreducible() True
Devuelve: verdadero o falso. Tipo del valor devuelto: bool
-
classmethod
genera_irreducible
(grado, p)[fuente]¶ Devuelve un polinomio irreducible de dicho grado con coeficientes módulo p.
>>> f = PolinomioZp.genera_irreducible(3, 2) >>> f.es_irreducible() True
Devuelve: el polinomio irreducible. Tipo del valor devuelto: PolinomioZp
-
alg_euclides
(a, b)[fuente]¶ Calcula el algoritmo extendido de Euclides para enteros.
Esto es, los (x, y, d) tal que \(a x + b y = d\), siendo d el máximo común divisor de (a, b).
>>> alg_euclides(54, 24) (1, -2, 6)
Parámetros: Devuelve: la lista [x, y, d].
Tipo del valor devuelto: List[int]
-
alg_euclides_polinomios
(g, h, p)[fuente]¶ Calcula el algoritmo extendido de Euclides para polinomios.
Esto es, los (s, t, d) tal que \(s g + t h = d\), siendo d el máximo común divisor mónico de (s, g).
>>> f = PolinomioZp([0, 0, 0, 1], p=2) >>> f X^3 >>> g = PolinomioZp([1, 0, 1, 1], p=2) >>> g X^3 + X^2 + 1 >>> alg_euclides_polinomios(f, g, p=2) (X^2 + X + 1, X^2 + 1, 1)
Parámetros: - g (PolinomioZp) – un polinomio no nulo con coeficientes enteros módulo p.
- h (PolinomioZp) – otro polinomio con coeficientes enteros módulo p.
- p (int) – el primo p.
Devuelve: la lista [s, t, d].
Tipo del valor devuelto: List[PolinomioZp]