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 tipo EnteroModuloP y otro de tipo int. En ambos casos el resultado será de tipo EnteroModuloP.

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 tipo PolinomioZp y otro de tipo int. En ambos casos el resultado será de tipo PolinomioZp.

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.

primo()[fuente]

Devuelve el primo p.

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:
  • coef (int) – el coeficiente líder del monomio.
  • grado (int) – el exponente del monomio.
Devuelve:

el monomio con dicho coeficiente y grado.

Tipo del valor devuelto:
 

PolinomioZp

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:
  • a (int) – un número positivo.
  • b (int) – otro número positivo.
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]