Calculadora PARI/GP para Discreta 2
“PARI/GP es un sistema de álgebra computacional muy utilizado, diseñado para cálculos rápidos en Teoría de Números.”
Se puede utilizar en un explorador web, accediendo a la siguiente página: pari/gp web. Los comandos se ingresan en el recuadro y se ejecutan haciendo click en “Evaluate with PARI”.
Lo que sigue son algunos comandos útiles para el curso de “Matemática Discreta 2” de FIng.
Máximo común divisor y coeficientes de Bezout
- Máximo común divisor entre 132 y 15 (“greatest common divisor” en inglés): gcd(132,15)
Devuelve: 3
- Coeficientes de Bezout de 132 y 15: gcdext(132,15)
Devuelve: [-1, 9, 3].
Esto quiere decir que: $mcd(132,15) = 3 = 132 \times (-1) + 15 \times (9)$. En particular los coeficientes de Bezout que devuelve son -1 y 9.
La palabra “ext” en el comando, hace alusión al algoritmo de Euclides extendido, mediante el que se calculan los coeficientes de Bezout.
Números primos
- Obtener una lista de los primeros 10 números primos: primes(10)
Devuelve: $[ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ]$.
- Hallar la cantidad de números primos menores o iguales a 23: primepi(23)
Devuelve: 9.
- Obtener una lista de los números primos menores o iguales a 23: primes( primepi(23) )
Devuelve: $[ 2, 3, 5, 7, 11, 13, 17, 19, 23 ]$
- Determinar si un número $n$ es primo: isprime(n)
Devuelve: 1 si es primo, 0 si no es
Teorema fundamental de la aritmética
- Hallar los factores primos del número 171: factor(171)
Devuelve: $[ 3, 2; 19, 1 ]$. Esto quiere decir que: $ 171 =3^2 \times 19^1 $.
- Calcular la cantidad de divisores de $22 = 11 \times 2$: numdiv(22)
Devuelve: 4.
- Calcular todos los divisores positivos de 22: divisors(22)
Devuelve: [1, 2, 11, 22].
Aritmética modular
- Calcular $7^{42}$ módulo 100: Mod(7^42,100)
Devuelve: Mod(49, 100); lo cual quiere decir que $7^{42} \equiv 49 \pmod{100}$.
- Otra forma de calcularlo: 7^42 % 100
Devuelve: 49 (igual que antes).
- Evaluar la función phi de Euler en $n=100$: eulerphi(100)
Devuelve: 40.
Sistemas de congruencias lineales
- Resolver un sistema de 2 congruencias lineales: $\begin{Bmatrix} x \equiv 2 \pmod{11} \\ x \equiv 10 \pmod{17} \end{Bmatrix}$: chinese( Mod(2,11), Mod(10, 17) )
Devuelve: Mod(112, 187). Esto quiere decir que la solución del sistema es: $x \equiv 112 \pmod{187}$. Notar que $187 = 11 \times 17$.
- Resolver un sistema de 3 congruencias lineales: $\begin{Bmatrix} x \equiv 2 \pmod{11} \\ x \equiv 10 \pmod{17} \\ x \equiv 18 \pmod{29} \end{Bmatrix}$:
chinese( chinese( Mod(2,11), Mod(10,17) ), Mod(18,29) )
Devuelve: Mod(4600, 5423); por lo que la solución del sistema es: $x \equiv 4600 \pmod{5423}$. Notar que $5423 = 11 \times 17 \times 29$.
Grupo multiplicativo de enteros módulo $n$
- Calcular el orden de la clase de equivalencia asociada al entero 4, en el grupo multiplicativo $U(9)$: znorder(Mod(4,9))
Devuelve: 3
- Calcular una raíz primitiva módulo $m=3^4$: znprimroot(3^4)
Devuelve: Mod(2, 81); lo cual quiere decir que 2 es raíz primitiva módulo $3^4=81$. En este comando el módulo debe ser potencia de un primo.
- Calcular representantes de todos los elementos del grupo multiplicativo $U(20)$. Es decir: enteros entre 1 y 20 que son coprimos con 20.
for (n=1, 20, if ( gcd(n,20) == 1, print1(n, “ “) ) )
Devuelve: 1 3 7 9 11 13 17 19.
Logaritmo discreto
- Calcular el logaritmo discreto de 38 en base 3, como elemento de $\mathbb{Z}_{42} = \mathbb{Z}_{ \varphi(43) }$: znlog( 38, Mod(3,43) )
Devuelve: 4; lo cual quiere decir que: $\log_3(38) \equiv 4 \pmod{42}$.
Esto equivale a decir que: $3^4 \equiv 38 \pmod{43}$. Por lo tanto, el valor obtenido se puede verificar con el comando: Mod(3^4,43), que efectivamente devuelve Mod(38,43).