“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”.

Distancia de separación en la esfera
PARI/GP mediante web.

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).