#<div class="alert alert-success">Fracciones y divisibilidad.</div>

Para realizar la mayor parte de los cálculos matemáticos de modo exacto utilizaremos la biblioteca **SYMPY**, que no viene de serie con Python, aunque si viene incluida en las distribuciones de Python para cálculo científico. Para ello se debe importar la biblioteca, y en general lo haremos con la sentencia **from sympy import ***.

Además presentaremos los resultados en formato $\LaTeX$. Para ello utilizamos la función **init_printing** (escribimos "init" y pulsamos el tabulador). Estas dos expresiones deben aparecer siempre al comienzo del notebook.

Para escribir fracciones utilizaremos la función **Rational** (es imprescindible escribir la primera letra con mayúsculas). Con las fracciones se pueden realizar todas las operaciones habituales y los resultados se presentan también en forma de fracción y no en formato decimal. Pero si en la operación introducimos un número decimal, la operación la realiza ya en decimales.

###<div class="alert alert-warning">Realiza las siguientes operaciones con fracciones.</div>


* Simplifica la fracción $\displaystyle \frac{46}{50}$


* $\displaystyle \frac{2}{3} +\frac{6}{7} + 1$


* $\displaystyle \frac{2}{5} \times \frac{7}{6}$


* $\displaystyle \frac{3}{4} + 1.0$


* Calcula $\displaystyle \left(\frac{2}{3}\right)^{100}$ y da el resultado en decimales.

Sympy puede factorizar números enteros de tamaño razonable con la función **factorint**. El resultado es lo que en Python se denomina un diccionario, donde aparecen el factor primo y el exponente separador por dos puntos. Si queremos que aparezca en el formato estandar, debemos añadir **visual = True**.

###<div class="alert alert-warning">Factoriza los números 612 y 5292 y comprueba el resultado.</div>

Las funciones para calcular el máximo común denominador y el mínimo común múltiplo son **gcd** y **lcm**, que son las iniciales inglesas que corresponden a nuestros **mcd** y **mcm**.

###<div class="alert alert-warning">Calcula el mcd y el mcm de los números anteriores.</div>

Para comprobar si un número es primo se utiliza la función **isprime**. Para números "pequeños" utiliza algoritmos exactos para su comprobación, pero para números grandes utiliza métodos probabilísticos. Parece que  esta función no es necesaria, pues con la factorización se puede saber si un número es primo o no lo es. Sin embargo los métodos de factorización son muy costosos computacionalmente y los test de primalidad no lo son tanto.

###<div class="alert alert-warning">Comprueba si $5673$ es primo. Lo mismo con $2^{32}+ 1$. Factorízalos.</div>

Para trabajar con divisores Sympy tiene dos funciones: **divisors**, que devuelve una lista con todos los divisores, y **divisor_count**, que únicamente cuenta el número de divisores.

###<div class="alert alert-warning">Calcula todos los divisores de 180.</div>

La función **sum** suma todos los elementos de una lista.

###<div class="alert alert-warning">Demuestra que 496 es un número perfecto.</div>

Para calcular el primo anterior y el primo siguiente se utilizan las funciones **nextprime** y **prevprime**. Para calcular el número de primos menores que una cantidad dada se utiliza **primepi**.

###<div class="alert alert-warning">Calcula el primo anterior y posterior a 1000.</div>

###<div class="alert alert-warning">Calcula $\pi(1000)$ (la cantidad de números primos menores que 1000).</div>

Para calcular con decimales cualquier expresión se utiliza el método **evalf**. Para utilizar un método, primero debemos escribir la expresión, después un punto y finalmente el nombre del método. Muchas veces lo más cómodo es guardar la expresión en una variable y emplear el método sobre dicha variable. En este caso el método **evalf** tiene un argumento opcional, que es el número de cifras significativas.

Una de las "funciones mágicas" de Ipython es **%%time**, que nos permite calcular el tiempo de cómputo de la celda en cuestión. Esto es una función propia de IPython, no disponible en Python.

###<div class="alert alert-warning">Calcula el número $\pi$ y $\sqrt{2}$ con 50 cifras significativas. Calcula algunos tiempos de cómputo.</div>

ipynb
53e8eabc5eecbb3da05bd7bcf7d5dc12dd3ae396
Jupyter Notebook
2021-11-26T04:54:09.000Z
2021-11-26T04:54:09.000Z
39d80cc7fe2584a0b5de01151bda361260e0ab1a
MIT
disoftw/python-for-maths
notebooks/03.- Fracciones y divisibilidad.ipynb
39d80cc7fe2584a0b5de01151bda361260e0ab1a
MIT
disoftw/python-for-maths
notebooks/03.- Fracciones y divisibilidad.ipynb
39d80cc7fe2584a0b5de01151bda361260e0ab1a
MIT
disoftw/python-for-maths
notebooks/03.- Fracciones y divisibilidad.ipynb