Números poderosos
Un número es poderoso si es igual a la suma de sus dígitos elevados a sus respectivas posiciones. Por ejemplo, los números 89, 135 y 1306 son poderosos ya que
1 2 3 |
89 = 8^1 + 9^2 135 = 1^1 + 3^2 + 5^3. 1306 = 1^1 + 3^2 + 0^3 + 6^4 |
Definir la función
1 |
esPoderoso :: Integer -> Bool |
tal que (esPoderoso n) se verifica si n es poderoso. Por ejemplo,
1 2 3 4 5 6 7 8 9 10 |
λ> esPoderoso 135 True λ> esPoderoso 80 False λ> esPoderoso 89 True λ> esPoderoso 12157692622039623539 True λ> [n | n <- [10..30000], esPoderoso n] [89,135,175,518,598,1306,1676,2427] |
Comprobar con QuickCheck que 12157692622039623539 es el mayor número poderoso.
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import Test.QuickCheck esPoderoso :: Integer -> Bool esPoderoso n = sum (zipWith (^) (digitos n) [1..]) == n digitos :: Integer -> [Integer] digitos n = [read [d] | d <- show n] -- La propiedad es prop_poderosos :: Integer -> Property prop_poderosos n = n > 0 ==> not (esPoderoso (12157692622039623539 + n)) -- La comprobación es -- λ> quickCheck prop_poderosos -- +++ OK, passed 100 tests. |
4 Comentarios