Algoritmo de Euclides y ecuaciones de congruencia
Taller de ´Algebra I
Algoritmo de Euclides
Elalgoritmo de Euclidescalcula el m´aximo com´un divisor entre dos n´umerosa,b∈Z.
Se basa en que sia,b∈Zyk∈Zes un n´umero cualquiera, entonces (a : b) = (a+kb : b)
Siq yr son el cociente y el resto de la divisi´on deaporb, tenemosa=qb+r, entonces
a−qb=r. Por lo tanto,
(a : b) = (a−qb : b) = (r : b) = (b : r) Por ejemplo, para calcular (30 : 48):
1 (30 : 48) — Dividimos 30 por 48,q= 0,r= 30 2 = (48 : 30) — Dividimos 48 por 30,q= 1,r= 18 3 = (30 : 18) —q= 1,r= 12 4 = (18 : 12) —q= 1,r= 6 5 = (12 : 6) —q= 2,r= 0 6 = (6 : 0) 7 = 6
Algoritmo de Euclides
Elalgoritmo de Euclidescalcula el m´aximo com´un divisor entre dos n´umerosa,b∈Z.
Se basa en que sia,b∈Zyk∈Zes un n´umero cualquiera, entonces (a : b) = (a+kb : b)
Siq yr son el cociente y el resto de la divisi´on deaporb, tenemosa=qb+r, entonces
a−qb=r. Por lo tanto,
(a : b) = (a−qb : b) = (r : b) = (b : r) Por ejemplo, para calcular (30 : 48):
1 (30 : 48) — Dividimos 30 por 48,q= 0,r= 30 2 = (48 : 30) — Dividimos 48 por 30,q= 1,r= 18 3 = (30 : 18) —q= 1,r= 12 4 = (18 : 12) —q= 1,r= 6 5 = (12 : 6) —q= 2,r= 0 6 = (6 : 0) 7 = 6
Algoritmo de Euclides
Elalgoritmo de Euclidescalcula el m´aximo com´un divisor entre dos n´umerosa,b∈Z.
Se basa en que sia,b∈Zyk∈Zes un n´umero cualquiera, entonces (a : b) = (a+kb : b)
Siqyr son el cociente y el resto de la divisi´on deaporb, tenemosa=qb+r, entonces
a−qb=r. Por lo tanto,
(a : b) = (a−qb : b) = (r : b) = (b : r)
Por ejemplo, para calcular (30 : 48):
1 (30 : 48) — Dividimos 30 por 48,q= 0,r= 30 2 = (48 : 30) — Dividimos 48 por 30,q= 1,r= 18 3 = (30 : 18) —q= 1,r= 12 4 = (18 : 12) —q= 1,r= 6 5 = (12 : 6) —q= 2,r= 0 6 = (6 : 0) 7 = 6
Algoritmo de Euclides
Elalgoritmo de Euclidescalcula el m´aximo com´un divisor entre dos n´umerosa,b∈Z.
Se basa en que sia,b∈Zyk∈Zes un n´umero cualquiera, entonces (a : b) = (a+kb : b)
Siqyr son el cociente y el resto de la divisi´on deaporb, tenemosa=qb+r, entonces
a−qb=r. Por lo tanto,
(a : b) = (a−qb : b) = (r : b) = (b : r) Por ejemplo, para calcular (30 : 48):
1 (30 : 48) — Dividimos 30 por 48,q= 0,r= 30 2 = (48 : 30) — Dividimos 48 por 30,q= 1,r= 18 3 = (30 : 18) —q= 1,r= 12 4 = (18 : 12) —q= 1,r= 6 5 = (12 : 6) —q= 2,r= 0 6 = (6 : 0) 7 = 6
Algoritmo de Euclides
Elalgoritmo de Euclidescalcula el m´aximo com´un divisor entre dos n´umerosa,b∈Z.
Se basa en que sia,b∈Zyk∈Zes un n´umero cualquiera, entonces (a : b) = (a+kb : b)
Siqyr son el cociente y el resto de la divisi´on deaporb, tenemosa=qb+r, entonces
a−qb=r. Por lo tanto,
(a : b) = (a−qb : b) = (r : b) = (b : r) Por ejemplo, para calcular (30 : 48):
1 (30 : 48) — Dividimos 30 por 48,q= 0,r= 30 2 = (48 : 30) — Dividimos 48 por 30,q= 1,r= 18 3 = (30 : 18) —q= 1,r= 12 4 = (18 : 12) —q= 1,r= 6 5 = (12 : 6) —q= 2,r= 0 6 = (6 : 0) 7 = 6
Algoritmo de Euclides
Elalgoritmo de Euclidescalcula el m´aximo com´un divisor entre dos n´umerosa,b∈Z.
Se basa en que sia,b∈Zyk∈Zes un n´umero cualquiera, entonces (a : b) = (a+kb : b)
Siqyr son el cociente y el resto de la divisi´on deaporb, tenemosa=qb+r, entonces
a−qb=r. Por lo tanto,
(a : b) = (a−qb : b) = (r : b) = (b : r) Por ejemplo, para calcular (30 : 48):
1 (30 : 48) — Dividimos 30 por 48,q= 0,r= 30 2 = (48 : 30) — Dividimos 48 por 30,q= 1,r= 18 3 = (30 : 18) —q= 1,r= 12 4 = (18 : 12) —q= 1,r= 6 5 = (12 : 6) —q= 2,r= 0 6 = (6 : 0) 7 = 6
Algoritmo de Euclides
Elalgoritmo de Euclidescalcula el m´aximo com´un divisor entre dos n´umerosa,b∈Z.
Se basa en que sia,b∈Zyk∈Zes un n´umero cualquiera, entonces (a : b) = (a+kb : b)
Siqyr son el cociente y el resto de la divisi´on deaporb, tenemosa=qb+r, entonces
a−qb=r. Por lo tanto,
(a : b) = (a−qb : b) = (r : b) = (b : r) Por ejemplo, para calcular (30 : 48):
1 (30 : 48) — Dividimos 30 por 48,q= 0,r= 30 2 = (48 : 30) — Dividimos 48 por 30,q= 1,r= 18 3 = (30 : 18) —q= 1,r= 12 4 = (18 : 12) —q= 1,r= 6 5 = (12 : 6) —q= 2,r= 0 6 = (6 : 0) 7 = 6
Algoritmo de Euclides
Elalgoritmo de Euclidescalcula el m´aximo com´un divisor entre dos n´umerosa,b∈Z.
Se basa en que sia,b∈Zyk∈Zes un n´umero cualquiera, entonces (a : b) = (a+kb : b)
Siqyr son el cociente y el resto de la divisi´on deaporb, tenemosa=qb+r, entonces
a−qb=r. Por lo tanto,
(a : b) = (a−qb : b) = (r : b) = (b : r) Por ejemplo, para calcular (30 : 48):
1 (30 : 48) — Dividimos 30 por 48,q= 0,r= 30 2 = (48 : 30) — Dividimos 48 por 30,q= 1,r= 18 3 = (30 : 18) —q= 1,r= 12 4 = (18 : 12) —q= 1,r= 6 5 = (12 : 6) —q= 2,r= 0 6 = (6 : 0) 7 = 6
Algoritmo de Euclides
Elalgoritmo de Euclidescalcula el m´aximo com´un divisor entre dos n´umerosa,b∈Z.
Se basa en que sia,b∈Zyk∈Zes un n´umero cualquiera, entonces (a : b) = (a+kb : b)
Siqyr son el cociente y el resto de la divisi´on deaporb, tenemosa=qb+r, entonces
a−qb=r. Por lo tanto,
(a : b) = (a−qb : b) = (r : b) = (b : r) Por ejemplo, para calcular (30 : 48):
1 (30 : 48) — Dividimos 30 por 48,q= 0,r= 30 2 = (48 : 30) — Dividimos 48 por 30,q= 1,r= 18 3 = (30 : 18) —q= 1,r= 12 4 = (18 : 12) —q= 1,r= 6 5 = (12 : 6) —q= 2,r= 0 6 = (6 : 0) 7 = 6
Algoritmo de Euclides
Elalgoritmo de Euclidescalcula el m´aximo com´un divisor entre dos n´umerosa,b∈Z.
Se basa en que sia,b∈Zyk∈Zes un n´umero cualquiera, entonces (a : b) = (a+kb : b)
Siqyr son el cociente y el resto de la divisi´on deaporb, tenemosa=qb+r, entonces
a−qb=r. Por lo tanto,
(a : b) = (a−qb : b) = (r : b) = (b : r) Por ejemplo, para calcular (30 : 48):
1 (30 : 48) — Dividimos 30 por 48,q= 0,r= 30 2 = (48 : 30) — Dividimos 48 por 30,q= 1,r= 18 3 = (30 : 18) —q= 1,r= 12 4 = (18 : 12) —q= 1,r= 6 5 = (12 : 6) —q= 2,r= 0 6 = (6 : 0) 7 = 6
Algoritmo de Euclides: Ejercicios
Ejercicios
1 Programar la funci´on
mcd :: Integer -> Integer -> Integer
que calcule el m´aximo com´un divisor entre dos n´umeros utilizando el algoritmo de Euclides.
mcd a b debe funcionar siempre que a >0,b≥ 0.
2 Pensar otro algoritmo para calcular el m´aximo com´un divisor modificando la funci´on
menorDivisor programada en clases anteriores.
3 Comparar el tiempo que tardan ambos programas para n´umeros peque˜nos y n´umeros grandes (por ejemplo, n´umeros de 10 d´ıgitos).
Algoritmo de Euclides extendido
Dados n´umerosa,b∈Z, existen enteross,ttales que
sa+tb= (a : b).
Ejemplos
I (8 : 5) = 1 y 2·8−3·5 = 1
I (9 : 15) = 3 y 2·9−1·15 = 3
Los valores des,tse pueden obtener con la versi´on extendida del algoritmo de Euclides. Por algoritmo de divisi´on:
a=bq+r (1)
y sabemos que (a : b) = (b : r) =g.
Si tenemoss1,t1tales ques1b+t1r=g, ¿c´omo obtenemoss yt? Multiplicamos (1) port1: t1a=t1bq+t1r y reemplazamos la expresi´on det1r: t1a=t1bq+ (g−s1b) Obtenemos t1a+ (s1−t1q)b=g Es decir,s=t1yt= (s1−t1q).
Algoritmo de Euclides extendido
Dados n´umerosa,b∈Z, existen enteross,ttales que
sa+tb= (a : b).
Ejemplos
I (8 : 5) = 1 y 2·8−3·5 = 1
I (9 : 15) = 3 y 2·9−1·15 = 3
Los valores des,t se pueden obtener con la versi´on extendida del algoritmo de Euclides. Por algoritmo de divisi´on:
a=bq+r (1)
y sabemos que (a : b) = (b : r) =g.
Si tenemoss1,t1tales ques1b+t1r =g, ¿c´omo obtenemoss yt?
Multiplicamos (1) port1: t1a=t1bq+t1r y reemplazamos la expresi´on det1r: t1a=t1bq+ (g−s1b) Obtenemos t1a+ (s1−t1q)b=g Es decir,s=t1yt= (s1−t1q).
Algoritmo de Euclides extendido
Dados n´umerosa,b∈Z, existen enteross,ttales que
sa+tb= (a : b).
Ejemplos
I (8 : 5) = 1 y 2·8−3·5 = 1
I (9 : 15) = 3 y 2·9−1·15 = 3
Los valores des,t se pueden obtener con la versi´on extendida del algoritmo de Euclides. Por algoritmo de divisi´on:
a=bq+r (1)
y sabemos que (a : b) = (b : r) =g.
Si tenemoss1,t1tales ques1b+t1r =g, ¿c´omo obtenemoss yt? Multiplicamos (1) port1: t1a=t1bq+t1r y reemplazamos la expresi´on det1r: t1a=t1bq+ (g−s1b) Obtenemos t1a+ (s1−t1q)b=g Es decir,s=t1yt= (s1−t1q).
Algoritmo extendido de Euclides 1 Programar la funci´on
emcd :: Integer -> Integer -> (Integer, Integer, Integer)
que utilice el algoritmo de Euclides extendido para obtener una 3-upla (g,s,t) tal que
g = (a : b) =sa+tb.
Sugerencia: para acceder a los elementos de la 3-upla, podemos definir las funciones
f s t 3 ( x , _ , _ ) = x s n d 3 ( _ , y , _ ) = y t r d 3 ( _ , _ , z ) = z
Utilizando la funci´on emcd encontrar alguna soluci´on de las ecuaciones diof´anticas 1 29x+ 17y= 1
2 89x+ 23y= 3 3 93x+ 27y= 3
Ecuaciones de congruencia
Usando el algoritmo extendido de Euclides podemos resolver ecuaciones de congruencia
ax≡b (modm) ¿Cu´ando tiene soluci´on la ecuaci´on?
Recordar que esa ecuaci´on es equivalente a la ecuaci´ondiof´antica
ax+mk=b
Tiene soluci´on si y solo si (a : m) divide ab.
Ejercicios
1 Programar la funci´on
tieneSolucion :: Integer -> Integer -> Integer -> Bool
que dadosa,bymdetermine si la ecuaci´onax≡b(modm) tiene soluci´on. 2 Programar la funci´on
solucionParticular :: Integer -> Integer -> Integer -> Integer
que dadosa,bymdetermine, si existe, un enteroxtal queax≡b (modm). (La funci´on puede quedar indefinida si la ecuaci´on no tiene soluci´on.)
Ecuaciones de congruencia
Usando el algoritmo extendido de Euclides podemos resolver ecuaciones de congruencia
ax≡b (modm) ¿Cu´ando tiene soluci´on la ecuaci´on?
Recordar que esa ecuaci´on es equivalente a la ecuaci´ondiof´antica
ax+mk=b
Tiene soluci´on si y solo si (a : m) divide ab.
Ejercicios
1 Programar la funci´on
tieneSolucion :: Integer -> Integer -> Integer -> Bool
que dadosa,bymdetermine si la ecuaci´onax≡b(modm) tiene soluci´on. 2 Programar la funci´on
solucionParticular :: Integer -> Integer -> Integer -> Integer
que dadosa,bymdetermine, si existe, un enteroxtal queax≡b (modm). (La funci´on puede quedar indefinida si la ecuaci´on no tiene soluci´on.)
Ecuaciones de congruencia
Usando el algoritmo extendido de Euclides podemos resolver ecuaciones de congruencia
ax≡b (modm) ¿Cu´ando tiene soluci´on la ecuaci´on?
Recordar que esa ecuaci´on es equivalente a la ecuaci´ondiof´antica
ax+mk=b
Tiene soluci´on si y solo si (a : m) divide ab.
Ejercicios
1 Programar la funci´on
tieneSolucion :: Integer -> Integer -> Integer -> Bool
que dadosa,bymdetermine si la ecuaci´onax≡b(modm) tiene soluci´on. 2 Programar la funci´on
solucionParticular :: Integer -> Integer -> Integer -> Integer
que dadosa,bymdetermine, si existe, un enteroxtal queax≡b (modm). (La funci´on puede quedar indefinida si la ecuaci´on no tiene soluci´on.)
Ecuaciones de congruencia
Usando el algoritmo extendido de Euclides podemos resolver ecuaciones de congruencia
ax≡b (modm) ¿Cu´ando tiene soluci´on la ecuaci´on?
Recordar que esa ecuaci´on es equivalente a la ecuaci´ondiof´antica
ax+mk=b
Tiene soluci´on si y solo si (a : m) divide ab.
Ejercicios
1 Programar la funci´on
tieneSolucion :: Integer -> Integer -> Integer -> Bool
que dadosa,bymdetermine si la ecuaci´onax≡b (modm) tiene soluci´on. 2 Programar la funci´on
solucionParticular :: Integer -> Integer -> Integer -> Integer
que dadosa,bymdetermine, si existe, un enteroxtal queax≡b (modm). (La funci´on puede quedar indefinida si la ecuaci´on no tiene soluci´on.)
Soluci´
on general de una ecuaci´
on de congruencia
La soluci´on de la ecuaci´on
ax≡b (modm) es una clase de congruencia.
Por ejemplo, la soluci´on de 3x≡2 (mod 5) esx ≡4 (mod 5). Recordamos de ´Algebra I c´omo resolver una ecuaci´on de congruencia. Ejemplo: 35x ≡15 (mod 20)
1 Calculamos (35 : 20) = 5 y dividimos la ecuaci´on por 5: 7x≡3 (mod 4) (si el mcd no divide ab, la ecuaci´on no tiene soluci´on) 2 Pasamos a ecuaci´on diof´antica 7x+ 4y= 3.
3 Buscamos una soluci´on particular de 7x+ 4y= 1, por ejemplo 7·(−1) + 4·2 = 1. 4 Multiplicamos por 3: 7·(−3) + 4·6 = 3
Soluci´
on general de una ecuaci´
on de congruencia
Vamos a representar las clases de congruencia por pares ordenados de enteros. El par (a,m) (conm>0) representa todos losx∈Zconx≡a (modm).
Ejercicios
1 Programar la funci´on
solucionGeneral :: Integer -> Integer -> Integer -> (Integer, Integer)
que dadosa,bymdetermine la clase de congruencia soluci´on de la ecuaci´onax≡b
(modm).
Ejemplos
I solucionGeneral 3 2 5 (4, 5) I solucionGeneral 35 15 20 (-3, 4)