N´ umeros primos y criterios de divisibilidad
Taller de ´Algebra I
1er cuatrimestre de 2014
Verificando si un n´ umero es primo
Ejercicio: (¡para hacer ahora!) Escribir una funci´on que determine si un n´umero natural es primo.
primo :: Integer -> Bool primo 2 = True
primo n = ...
En este caso, se complica un poco pensarlo directamente en forma recursiva. No es tan evidente c´omo plantear primo n en funci´on de primo (n-1).
Pero si planteamos esto:
primo n = length (factorizar n) == 1 O esto:
primo n = length (divisores n) == 2
Y ahora, ¿C´omo podemos escribir la funci´on divisores?
Verificando si un n´ umero es primo
Ejercicio: (¡para hacer ahora!) Escribir una funci´on que determine si un n´umero natural es primo.
primo :: Integer -> Bool
primo 2 = True primo n = ...
En este caso, se complica un poco pensarlo directamente en forma recursiva. No es tan evidente c´omo plantear primo n en funci´on de primo (n-1).
Pero si planteamos esto:
primo n = length (factorizar n) == 1 O esto:
primo n = length (divisores n) == 2
Y ahora, ¿C´omo podemos escribir la funci´on divisores?
Verificando si un n´ umero es primo
Ejercicio: (¡para hacer ahora!) Escribir una funci´on que determine si un n´umero natural es primo.
primo :: Integer -> Bool primo 2 = True
primo n = ...
En este caso, se complica un poco pensarlo directamente en forma recursiva. No es tan evidente c´omo plantear primo n en funci´on de primo (n-1).
Pero si planteamos esto:
primo n = length (factorizar n) == 1 O esto:
primo n = length (divisores n) == 2
Y ahora, ¿C´omo podemos escribir la funci´on divisores?
Verificando si un n´ umero es primo
Ejercicio: (¡para hacer ahora!) Escribir una funci´on que determine si un n´umero natural es primo.
primo :: Integer -> Bool primo 2 = True
primo n = ...
En este caso, se complica un poco pensarlo directamente en forma recursiva. No es tan evidente c´omo plantear primo n en funci´on de primo (n-1).
Pero si planteamos esto:
primo n = length (factorizar n) == 1 O esto:
primo n = length (divisores n) == 2
Y ahora, ¿C´omo podemos escribir la funci´on divisores?
Verificando si un n´ umero es primo
Ejercicio: (¡para hacer ahora!) Escribir una funci´on que determine si un n´umero natural es primo.
primo :: Integer -> Bool primo 2 = True
primo n = ...
En este caso, se complica un poco pensarlo directamente en forma recursiva. No es tan evidente c´omo plantear primo n en funci´on de primo (n-1).
Pero si planteamos esto:
primo n = length (factorizar n) == 1 O esto:
primo n = length (divisores n) == 2
Y ahora, ¿C´omo podemos escribir la funci´on divisores?
Verificando si un n´ umero es primo
Ejercicio: (¡para hacer ahora!) Escribir una funci´on que determine si un n´umero natural es primo.
primo :: Integer -> Bool primo 2 = True
primo n = ...
En este caso, se complica un poco pensarlo directamente en forma recursiva. No es tan evidente c´omo plantear primo n en funci´on de primo (n-1).
Pero si planteamos esto:
primo n = length (factorizar n) == 1
O esto:
primo n = length (divisores n) == 2
Y ahora, ¿C´omo podemos escribir la funci´on divisores?
Verificando si un n´ umero es primo
Ejercicio: (¡para hacer ahora!) Escribir una funci´on que determine si un n´umero natural es primo.
primo :: Integer -> Bool primo 2 = True
primo n = ...
En este caso, se complica un poco pensarlo directamente en forma recursiva. No es tan evidente c´omo plantear primo n en funci´on de primo (n-1).
Pero si planteamos esto:
primo n = length (factorizar n) == 1 O esto:
primo n = length (divisores n) == 2
Y ahora, ¿C´omo podemos escribir la funci´on divisores?
Verificando si un n´ umero es primo
Ejercicio: (¡para hacer ahora!) Escribir una funci´on que determine si un n´umero natural es primo.
primo :: Integer -> Bool primo 2 = True
primo n = ...
En este caso, se complica un poco pensarlo directamente en forma recursiva. No es tan evidente c´omo plantear primo n en funci´on de primo (n-1).
Pero si planteamos esto:
primo n = length (factorizar n) == 1 O esto:
primo n = length (divisores n) == 2
Y ahora, ¿C´omo podemos escribir la funci´on divisores?
Criba de Erat´ ostenes
Fue el primero en calcular y dejar registro el radio de la Tierra.
Le di´o R = 40.000/2π = 6366.19 km Las mediciones actuales dan 6378 km
Para el curioso: se bas´o un m´etodo basado en las sombras de objetos de referencia.
Lacriba de Erat´osteneses un algoritmo para hallar todos los n´umeros primos menores que un natural dado n.
1 Escribir una tabla con todos los n´umeros entre 2 y n.
2 El primer entero no tachado es primo. Imprimirlo y tachar todos sus m´ultiplos.
3 Repetir el paso anterior hasta que no queden n´umeros sin tachar. Esta descripci´on no es muy funcional... ¿C´omo se implementar´ıa en Haskell?
Criba de Erat´ ostenes
Fue el primero en calcular y dejar registro el radio de la Tierra.
Le di´o R = 40.000/2π = 6366.19 km Las mediciones actuales dan 6378 km
Para el curioso: se bas´o un m´etodo basado en las sombras de objetos de referencia.
Lacriba de Erat´osteneses un algoritmo para hallar todos los n´umeros primos menores que un natural dado n.
1 Escribir una tabla con todos los n´umeros entre 2 y n.
2 El primer entero no tachado es primo. Imprimirlo y tachar todos sus m´ultiplos.
3 Repetir el paso anterior hasta que no queden n´umeros sin tachar.
Esta descripci´on no es muy funcional... ¿C´omo se implementar´ıa en Haskell?
Criba de Erat´ ostenes
Fue el primero en calcular y dejar registro el radio de la Tierra.
Le di´o R = 40.000/2π = 6366.19 km Las mediciones actuales dan 6378 km
Para el curioso: se bas´o un m´etodo basado en las sombras de objetos de referencia.
Lacriba de Erat´osteneses un algoritmo para hallar todos los n´umeros primos menores que un natural dado n.
1 Escribir una tabla con todos los n´umeros entre 2 y n.
2 El primer entero no tachado es primo. Imprimirlo y tachar todos sus m´ultiplos.
3 Repetir el paso anterior hasta que no queden n´umeros sin tachar.
Esta descripci´on no es muy funcional... ¿C´omo se implementar´ıa en Haskell?
Criterios de divisibilidad
Representamos n´umeros naturales como listas de enteros, de modo tal que cada posici´on de la lista corresponde a un d´ıgito en base 10:
Ejemplos:
1 145 = [1,4,5]
2 13 = [1,3]
3 0 = [0]
Ya sabemos c´omo pasar de un Int a una [Int] que lo represente en base 10!
Ejercicios
Implementar una funci´on en Haskell que reciba un n´umero natural como par´ametro e indique si el mismo es primo. Utilizar la criba de Erat´ostenes.
Conjetura (Christian Goldbach, 1742) Todo n´umero par mayor que 2 puede escribirse como suma de dos n´umeros primos.
Ejercicio Hacer un programa en Haskell que chequee la conjetura de Goldbach: Dado un n´umero natural n, determinar si puede escribirse como suma de dos n´umeros primos.
Ejercicio Programar los siguientes criterios de divisibilidad:
1 Un n´umero es m´ultiplo de 2 cuando termina en una cifra par.
2 Un n´umero es m´ultiplo de 5 cuando termina en 0 o 5.
3 Un n´umero es m´ultiplo de 10 cuando termina en 0.
4 Un n´umero es m´ultiplo de 4 cuando el n´umero formado por sus dos
´
ultimas cifras es m´ultiplo de 4.
5 Un n´umero es m´ultiplo de 8 cuando el n´umero formado por sus tres
´
ultimas cifras es m´ultiplo de 8.
Ejercicios
Implementar una funci´on en Haskell que reciba un n´umero natural como par´ametro e indique si el mismo es primo. Utilizar la criba de Erat´ostenes.
Conjetura (Christian Goldbach, 1742) Todo n´umero par mayor que 2 puede escribirse como suma de dos n´umeros primos.
Ejercicio Hacer un programa en Haskell que chequee la conjetura de Goldbach: Dado un n´umero natural n, determinar si puede escribirse como suma de dos n´umeros primos.
Ejercicio Programar los siguientes criterios de divisibilidad:
1 Un n´umero es m´ultiplo de 2 cuando termina en una cifra par.
2 Un n´umero es m´ultiplo de 5 cuando termina en 0 o 5.
3 Un n´umero es m´ultiplo de 10 cuando termina en 0.
4 Un n´umero es m´ultiplo de 4 cuando el n´umero formado por sus dos
´
ultimas cifras es m´ultiplo de 4.
5 Un n´umero es m´ultiplo de 8 cuando el n´umero formado por sus tres
´
ultimas cifras es m´ultiplo de 8.
Ejercicios
Implementar una funci´on en Haskell que reciba un n´umero natural como par´ametro e indique si el mismo es primo. Utilizar la criba de Erat´ostenes.
Conjetura (Christian Goldbach, 1742) Todo n´umero par mayor que 2 puede escribirse como suma de dos n´umeros primos.
Ejercicio Hacer un programa en Haskell que chequee la conjetura de Goldbach: Dado un n´umero natural n, determinar si puede escribirse como suma de dos n´umeros primos.
Ejercicio Programar los siguientes criterios de divisibilidad:
1 Un n´umero es m´ultiplo de 2 cuando termina en una cifra par.
2 Un n´umero es m´ultiplo de 5 cuando termina en 0 o 5.
3 Un n´umero es m´ultiplo de 10 cuando termina en 0.
4 Un n´umero es m´ultiplo de 4 cuando el n´umero formado por sus dos
´
ultimas cifras es m´ultiplo de 4.
5 Un n´umero es m´ultiplo de 8 cuando el n´umero formado por sus tres
´
ultimas cifras es m´ultiplo de 8.
Ejercicios
Implementar una funci´on en Haskell que reciba un n´umero natural como par´ametro e indique si el mismo es primo. Utilizar la criba de Erat´ostenes.
Conjetura (Christian Goldbach, 1742) Todo n´umero par mayor que 2 puede escribirse como suma de dos n´umeros primos.
Ejercicio Hacer un programa en Haskell que chequee la conjetura de Goldbach: Dado un n´umero natural n, determinar si puede escribirse como suma de dos n´umeros primos.
Ejercicio Programar los siguientes criterios de divisibilidad:
1 Un n´umero es m´ultiplo de 2 cuando termina en una cifra par.
2 Un n´umero es m´ultiplo de 5 cuando termina en 0 o 5.
3 Un n´umero es m´ultiplo de 10 cuando termina en 0.
4 Un n´umero es m´ultiplo de 4 cuando el n´umero formado por sus dos
´
ultimas cifras es m´ultiplo de 4.
5 Un n´umero es m´ultiplo de 8 cuando el n´umero formado por sus tres
´
ultimas cifras es m´ultiplo de 8.
Ejercicios
Implementar una funci´on en Haskell que reciba un n´umero natural como par´ametro e indique si el mismo es primo. Utilizar la criba de Erat´ostenes.
Conjetura (Christian Goldbach, 1742) Todo n´umero par mayor que 2 puede escribirse como suma de dos n´umeros primos.
Ejercicio Hacer un programa en Haskell que chequee la conjetura de Goldbach: Dado un n´umero natural n, determinar si puede escribirse como suma de dos n´umeros primos.
Ejercicio Programar los siguientes criterios de divisibilidad:
1 Un n´umero es m´ultiplo de 2 cuando termina en una cifra par.
2 Un n´umero es m´ultiplo de 5 cuando termina en 0 o 5.
3 Un n´umero es m´ultiplo de 10 cuando termina en 0.
4 Un n´umero es m´ultiplo de 4 cuando el n´umero formado por sus dos
´
ultimas cifras es m´ultiplo de 4.
5 Un n´umero es m´ultiplo de 8 cuando el n´umero formado por sus tres
´
ultimas cifras es m´ultiplo de 8.
Ejercicios
Implementar una funci´on en Haskell que reciba un n´umero natural como par´ametro e indique si el mismo es primo. Utilizar la criba de Erat´ostenes.
Conjetura (Christian Goldbach, 1742) Todo n´umero par mayor que 2 puede escribirse como suma de dos n´umeros primos.
Ejercicio Hacer un programa en Haskell que chequee la conjetura de Goldbach: Dado un n´umero natural n, determinar si puede escribirse como suma de dos n´umeros primos.
Ejercicio Programar los siguientes criterios de divisibilidad:
1 Un n´umero es m´ultiplo de 2 cuando termina en una cifra par.
2 Un n´umero es m´ultiplo de 5 cuando termina en 0 o 5.
3 Un n´umero es m´ultiplo de 10 cuando termina en 0.
4 Un n´umero es m´ultiplo de 4 cuando el n´umero formado por sus dos
´
ultimas cifras es m´ultiplo de 4.
5 Un n´umero es m´ultiplo de 8 cuando el n´umero formado por sus tres
´
ultimas cifras es m´ultiplo de 8.
Criterios de divisibilidad
M´as ejercicios! Sumando cifras ...
1 Un n´umero es m´ultiplo de 3 cuando la suma de sus cifras es m´ultiplo de 3 (¡y esto ´ultimo se decide recursivamente!).
2 Un n´umero es m´ultiplo de 9 cuando la suma de sus cifras es m´ultiplo de 9.
Ejercicios sencillos. Aprovechando lo que ya tenemos ...
1 Un n´umero es m´ultiplo de 6 cuando es m´ultiplo de 2 y de 3.
2 Un n´umero es m´ultiplo de 12 cuando es m´ultiplo de 3 y 4, o bien es m´ultiplo de 6.
3 Un n´umero es m´ultiplo de 15 cuando es m´ultiplo de 3 y 5.
Criterios de divisibilidad
Nuevos ejercicios! Criterios de cintur´on negro ...
1 Un n´umero es m´ultiplo de 7 cuando, al separar la ´ultima cifra de la derecha, multiplicarla por 2 y restarla de las cifras restantes, la diferencia es m´ultiplo de 7.
2 Para determinar si un n´umero es m´ultiplo de 11, sumar las cifras en posici´on impar por un lado y las de posici´on par por otro. Luego se resta el resultado de ambas sumas obtenidas. El n´umero es m´ultiplo de 11 si el resultado es m´ultiplo de 11.
3 Un n´umero es divisible por 17 cuando, al separar la ´ultima cifra de la derecha, multiplicarla por 5 y restarla de las cifras restantes la diferencia es m´ultiplo de 17.
4 Un n´umero es divisible por 19 si al separar la cifra de las unidades, multiplicarla por 2 y sumar a las cifras restantes el resultado es m´ultiplo de 19.