Salta al contenido principal

Sección A.2 Aritmética Básica

Las operaciones aritméticas con enteros se realizan en SageMath con los operadores habituales y tradicionales; así como la operación con paréntesis y el orden de precedencia de los operadores. Las fracciones se escriben en la forma habitual, con la barra de división. Los números reales se escriben con el punto decimal, y la raíz cuadrada mediante el uso del operador sqrt(), etc., los siguiente ejercicios interactivos muestran las potencialidades de SageMath, y su simplicidad para las operaciones aritméticas tradicionales; tal y cual como se usa una calculadora en notación algebraica verdadera.
Puede escribir una operación aritmética en la celda de entrada e.g., 3+2 y verificar el resultado, para cada caso a considerar; incluso la operación puede ser una serie de instrucciones utilizando varias líneas dentro de la celda de cálculo:
SageMath opera como un cuaderno de trabajo, donde el resultado de cada operación queda guardado en "memoria" y puede ser utilizado más adelante en cualquier operación de calculo. e.g., el valor de a resultante del paso anterior, puede ser reutilizado para otra operación; es por ello que se debe tener cuidado al ejecutar una celda; se actualizaran los valores de las variables afectadas en la memoria de cálculo:
al ejecutar la anterior y luego la siguiente celda, se puede detallar los posibles resultados dependiendo de la interacción que ha tenido el usuario con las distintas celdas de entrada de datos y evaluación de las mismas:

Nota A.2.1. División de enteros.

El comando \(a \; \% \; b\) devolverá el resto tras la división de \(a\) por \(b\text{.}\) En otras palabras, el valor es el entero único \(r\) tal que:
  1. \(0 \leq r\lt b\text{.}\)
  2. \(a = bq + r\) para algún entero \(q\) que llamaremos "el cociente".
Entonces \(\left( a - b\right) / r\) será igual a \(q\text{,}\) e.g.:
devolverá \(2\) para el valor de \(R\) y \(4\) para el valor de \(q\text{.}\) Tenga en cuenta que el "\(/\)" es la división de enteros, donde se desecha cualquier resto y el resultado es siempre un entero. Entonces, por ejemplo, \(4.66666\) nuevamente será igual a \(4\text{,}\) no a \(4.66666\text{.}\)

Nota A.2.2. Máximo común divisor.

El máximo común divisor de \(a\) y \(b\) se obtiene con el comando gcd(a,b) , donde en nuestros primeros usos, \(a\) y \(b\) son enteros. Más tarde, \(a\) y \(b\) pueden ser otros objetos con una noción de divisibilidad mas abstracta, como los polinomios. e.g.:

Nota A.2.3. Máximo divisor común extendido.

El comando xgcd(a, b) (“eXtended GCD”) devuelve un triple donde el primer elemento es el máximo divisor común de \(a\) y \(b\) (como con el comando gcd(a, b) anterior ), pero los siguientes dos elementos son los valores de \(r\) y \(s\) tales que \(ra+sb =\) xgcd(a, b) e.g., xgcd\((633, 331)\) devuelve \((1, 194, -371)\text{.}\) Se pueden extraer partes del triple usando \([\;]\) para acceder a las entradas del triple, comenzando con el primero como número \(0\text{.}\) Por ejemplo, lo siguiente debería devolver el resultado True (incluso si cambia los valores de \(a\) y \(b\)). Estudiar este bloque de código contribuirá en gran medida a ayudarlo a aprovechar al máximo la producción de Sage. (Con "\(=\)" se asigna un valor a una variable, mientras que con "\(==\)" es cómo se determina la igualdad de dos elementos).

Nota A.2.4. Divisibilidad.

Un resto igual a cero indica divisibilidad. Entonces \((a \; \% \; b) == 0\) devolverá True si \(b\) divide \(a\) , y de lo contrario devolverá False. Por ejemplo, \(\left(9\; \% \; 3\right) == 0\) es True, pero \(\left(9\; \% \; 4\right) == 0\) es False, e.g.:

Nota A.2.5. Factorizar.

Teorema fundamental de la aritmética, el factor (a) devolverá una expresión única para \(a\) como producto de potencias de números primos. Impreso de forma agradablemente y legible, pero también se puede manipular con Python como una lista de pares \((p_i,e_i)\) contienen primos como bases y sus exponentes asociados. Por ejemplo:
Si solo desea los divisores primos de un número entero, utilice el prime_divisors(a) , que devolverá una lista de todos los divisores primos de \(a\text{.}\) Por ejemplo:

Nota A.2.6. Inverso Multiplicativo.

Dado un número \(a\) y un módulo \(n\text{,}\) el inverso modular de \(a\) módulo \(n\) es otro número \(b\) tal que \(a \times b \equiv \pmod{n}\text{;}\) el número \(b\) se conoce como el inverso multiplicativo de \(a\) módulo \(n\text{.}\) El comando inverse_mod(a, n) produce el inverso multiplicativo de a \(\pmod{n}\text{;}\) o un error si no existe. Por ejemplo:
e.g., el entero \(m\) tal que \(352*508 == m*917+1\text{.}\) Luego :
Como la división por cero no es posible, la salida será una advertencia de error: ZeroDivisionError: inverse of Mod(4, 24) does not exist.