Números potencias perfectas de la suma de sus dígitos
El número 2401 es una potencia de la suma de sus dígitos, ya que dicha suma es 7 y 7^4 = 2401.
Definir la lista
potenciaSumaDigitos :: [Integer]
cuyos elementos son los números que son potencias de las sumas de sus dígitos. Por ejemplo,
λ> take 17 potenciaSumaDigitos [0,1,2,3,4,5,6,7,8,9,81,512,2401,4913,5832,17576,19683]
Soluciones
-- 1ª solución -- =========== potenciaSumaDigitos :: [Integer] potenciaSumaDigitos = 0 : filter esPotenciaSumaDigitos [0..] -- (esPotenciaSumaDigitos n) se verifica si n es una potencia de la suma -- de sus dígitos. Por ejemplo, -- esPotenciaSumaDigitos 2401 == True -- esPotenciaSumaDigitos 2402 == False esPotenciaSumaDigitos :: Integer -> Bool esPotenciaSumaDigitos n = or [n == x^k | k <- [1..n]] where x = sumaDigitos n -- (sumaDigitos n) es la suma de los dígitos de n. Por ejemplo, -- sumaDigitos 2021 == 5 sumaDigitos :: Integer -> Integer sumaDigitos = sum . digitos -- (digitos n) es la lista de los dígitos de n. Por ejemplo, -- digitos 2021 == [2,0,2,1] digitos :: Integer -> [Integer] digitos x = [read [c] | c <- show x] -- 2ª solución -- =========== potenciaSumaDigitos2 :: [Integer] potenciaSumaDigitos2 = 0 : 1 : filter esPotenciaSumaDigitos2 [2..] -- (esPotenciaSumaDigitos2 n) se verifica si n es una potencia de la suma -- de sus dígitos. Por ejemplo, -- esPotenciaSumaDigitos2 2401 == True -- esPotenciaSumaDigitos2 2402 == False esPotenciaSumaDigitos2 :: Integer -> Bool esPotenciaSumaDigitos2 n = n == x^k where x = sumaDigitos n k = round (logBase (fromIntegral x) (fromIntegral n))