# 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
```