El factorial de 7 es
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
ultimoNoNuloFactorial :: Integer -> Integer |
tal que (ultimoNoNuloFactorial n) es el último dígito no nulo del factorial de n. Por ejemplo,
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
import Data.Char (digitToInt) import Test.QuickCheck -- 1ª solución -- =========== ultimoNoNuloFactorial :: Integer -> Integer ultimoNoNuloFactorial = ultimoNoNulo . factorial -- (factorial n) es el factorial de n. Por ejemplo, -- factorial 7 == 5040 factorial :: Integer -> Integer factorial n = product [1..n] -- (ultimoNoNulo n) es el último dígito no nulo de n. Por ejemplo, -- ultimoNoNulo 5040 == 4 ultimoNoNulo :: Integer -> Integer ultimoNoNulo n | r /= 0 = r | otherwise = ultimoNoNulo q where (q,r) = n `quotRem` 10 -- 2ª solución -- =========== ultimoNoNuloFactorial2 :: Integer -> Integer ultimoNoNuloFactorial2 = last . filter (/= 0) . digitos . factorial digitos :: Integer -> [Integer] digitos n = [read [x] | x <- show n] -- 3ª solución -- =========== ultimoNoNuloFactorial3 :: Integer -> Integer ultimoNoNuloFactorial3 = last . filter (/= 0) . digitos3 . factorial3 digitos3 :: Integer -> [Integer] digitos3 = map (fromIntegral . digitToInt) . show factorial3 :: Integer -> Integer factorial3 = product . enumFromTo 1 -- 4ª solución -- =========== ultimoNoNulo4 :: Integer -> Integer ultimoNoNulo4 n = read [head (dropWhile (=='0') (reverse (show n)))] -- 5ª solución -- =========== ultimoNoNulo5 :: Integer -> Integer ultimoNoNulo5 = read . return . head . dropWhile ('0' ==) . reverse . show -- Propiedad -- ========= -- 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
Busca el tu esencial,
que no está en ninguna parte
y en todas partes está.Antonio Machado