Último dígito no nulo del factorial
El factorial de 7 es
1 |
7! = 1 * 2 * 3 * 4 * 5 * 6 * 7 = 5040 |
por tanto, el último dígito no nulo del factorial de 7 es 4.
Definir la función
1 |
ultimoNoNuloFactorial :: Integer -> Integer |
tal que (ultimoNoNuloFactorial n) es el último dígito no nulo del factorial de n. Por ejemplo,
1 2 3 4 5 |
ultimoNoNuloFactorial 7 == 4 ultimoNoNuloFactorial 10 == 8 ultimoNoNuloFactorial 12 == 6 ultimoNoNuloFactorial 97 == 2 ultimoNoNuloFactorial 0 == 1 |
Comprobar con QuickCheck que si n es mayor que 4, entonces el último dígito no nulo del factorial de n es par.
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
import Test.QuickCheck -- 1ª definición -- ============= ultimoNoNuloFactorial :: Integer -> Integer ultimoNoNuloFactorial n = ultimoNoNulo (factorial n) -- (ultimoNoNulo n) es el último dígito no nulo de n. Por ejemplo, -- ultimoNoNulo 5040 == 4 ultimoNoNulo :: Integer -> Integer ultimoNoNulo n | m /= 0 = m | otherwise = ultimoNoNulo (n `div` 10) where m = n `rem` 10 -- (factorial n) es el factorial de n. Por ejemplo, -- factorial 7 == 5040 factorial :: Integer -> Integer factorial n = product [1..n] -- 2ª definición -- ============= ultimoNoNuloFactorial2 :: Integer -> Integer ultimoNoNuloFactorial2 n = ultimoNoNulo2 (factorial n) -- (ultimoNoNulo2 n) es el último dígito no nulo de n. Por ejemplo, -- ultimoNoNulo 5040 == 4 ultimoNoNulo2 :: Integer -> Integer ultimoNoNulo2 n = read [head (dropWhile (=='0') (reverse (show n)))] -- Comprobación -- ============ -- La propiedad es prop_ultimoNoNuloFactorial :: Integer -> Property prop_ultimoNoNuloFactorial n = n > 4 ==> even (ultimoNoNuloFactorial n) -- La comprobación es -- ghci> quickCheck prop_ultimoNoNuloFactorial -- +++ OK, passed 100 tests. |
Pensamiento
Incierto es, lo porvenir. ¿Quién sabe lo que va a pasar? Pero incierto es también lo pretérito. ¿Quién sabe lo que ha pasado? De suerte que ni el porvenir está escrito en ninguna parte, ni el pasado tampoco.
Antonio Machado