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
| 1 |    potenciaSumaDigitos :: [Integer] | 
cuyos elementos son los números que son potencias de las sumas de sus dígitos. Por ejemplo,
| 1 2 |    λ> take 17 potenciaSumaDigitos    [0,1,2,3,4,5,6,7,8,9,81,512,2401,4913,5832,17576,19683] | 
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 | -- 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)) | 
Nuevas soluciones
- En los comentarios se pueden escribir nuevas soluciones.
- El código se debe escribir entre una línea con <pre lang="haskell"> y otra con </pre>