313 views
# PLP | Practica 0 Ejercicio 2 ```haskell valorAbsoluto :: Float -> Float valorAbsoluto x = abs (x) bisiesto :: Int -> Bool bisiesto x = (x `mod` 4) == 0 && (x `mod` 100) /= 0 || (x `mod` 400) == 0 factorial :: Int -> Int -- Caso base factorial 0 = 1 -- Caso recursivo factorial n = n * factorial (n-1) cantidadDivisoresPrimos :: Int -> Int cantidadDivisoresPrimos n = contarPrimos n 2 where contarPrimos n d | d > n = 0 -- Caso base | esPrimo d && n `mod` d == 0 = 1 + contarPrimos n (d+1) -- Si es divisor y es primo se suma 1 | otherwise = contarPrimos n (d+1) -- Si no es divisor se sigue buscando esPrimo :: Int -> Bool esPrimo n | n <= 1 = False | n == 2 = True | otherwise = not (tieneDivisor n 2) -- Verifica si hay divisores comenzando desde 2 tieneDivisor :: Int -> Int -> Bool tieneDivisor n d | d * d > n = False -- Si d^2 es mayor que n, no hay más divisores posibles | n `mod` d == 0 = True -- Si n es divisible por d, entonces d es un divisor | otherwise = tieneDivisor n (d + 1) -- caso recursivo para buscar más divisores ```