-- PD 2008-09: Práctica 10 (13 de enero de 2010)
-- Departamento de Ciencias de la Computación e I.A.
-- Universidad de Sevilla
-- ============================================================================

-- ----------------------------------------------------------------------------
-- Importación de librerías auxiliares                                       --
-- ----------------------------------------------------------------------------

import Data.List
import Test.QuickCheck

-- ---------------------------------------------------------------------
-- Ejercicio 1. Los números naturales menores que 10 que son múltiplos
-- de 3 ó 5 son 3, 5, 6 y 9. La suma de estos múltiplos es 23.
-- 
-- Definir la función
--    euler1 :: Integer -> Integer
-- (euler1 n) es la suma de todos los múltiplos de 3 ó 5 menores que
-- n. Por ejemplo,
--    euler1 10  =>  23
-- 
-- Escribir distintas definiciones y comparar su eficiencia al calcular
-- (euler1 1000).
-- ---------------------------------------------------------------------

-- ---------------------------------------------------------------------
-- Ejercicio 2. Cada término de la sucesión de Fibonacci se obtiene
-- sumando los dos anteriores. Comenzando con 1 y 2, los 10 primeros
-- términos son 
--    1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
-- 
-- Definir la función 
--    euler2 :: Integer -> Integer
-- tal que (euler2 n) es la suma de los términos pares (2, 8, 34, ...)
-- de la sucesión de Fibonacci que sean menores que n. Por ejemplo,
--    euler2 35  =>  44   
-- 
-- Escribir distintas definiciones y comparar su eficiencia al calcular
-- (euler2 4000000).
-- ---------------------------------------------------------------------

-- ---------------------------------------------------------------------
-- Ejercicio 3. Los factores primos de 13195 son 5, 7, 13 y 29. Definir la
-- función  
--    euler3 :: Integer -> Integer
-- tal que (euler3 n) es el mayor factor primo de n. Por
-- ejemplo, 
--    euler3 13195  =>  29
-- 
-- Escribir distintas definiciones y comparar su eficiencia al calcular
-- (euler3 600851475143).
-- ---------------------------------------------------------------------

-- ---------------------------------------------------------------------
-- Ejercicio 4. Un capicúa es un número que es igual leído de izquierda
-- a derecha que de derecha a izquierda. El mayor capicúa formado por el
-- producto de dos números de 2 cifras es 9009 = 91 × 99.
-- 
-- Definir la función
--    euler4 :: Integer -> Integer
-- tal que (euler4 n) es mayor capicúa que es el producto de dos números
-- de n cifras. Por ejemplo, 
--    euler4 2  =>  9009   
-- 
-- Escribir distintas definiciones y comparar su eficiencia al calcular
-- (euler4 3).
-- ---------------------------------------------------------------------

-- ---------------------------------------------------------------------
-- Ejercicio 5. Definir la función 
--    euler5 :: Integer -> Integer -> Integer
-- tal que (euler5 a b) es el menor número divisible por los
-- números desde a hasta b. Por ejemplo,
--    euler5 1 10  =>  2520
-- 
-- Escribir distintas definiciones y comparar su eficiencia al calcular
-- (euler5 1 20).
-- ---------------------------------------------------------------------


