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>