Entero positivo con ciertas propiedades
El 6 de octubre, se propuso en el blog Gaussianos el siguiente problema
Demostrar que para todo entero positivo n, existe otro entero positivo que tiene las siguientes propiedades:
- Tiene exactamente n dígitos.
- Ninguno de sus dígitos es 0.
- Es divisible por la suma de sus dígitos.
Definir la función
1 |
especiales :: Integer -> [Integer] |
tal que (especiales n) es la lista de los números enteros que cumplen las 3 propiedades anteriores para n. Por ejemplo,
1 2 3 4 5 |
take 3 (especiales 2) == [12,18,21] take 3 (especiales 3) == [111,112,114] head (especiales 30) == 111111111111111111111111111125 length (especiales 3) == 108 null (especiales 1000) == False |
En el primer ejemplo, 12 es un número especial para 2 ya que tiene exactamente 2 dígitos, ninguno de sus dígitos es 0 y 12 es divisible por la suma de sus dígitos.
Soluciones
1 2 3 4 5 6 7 8 9 |
especiales :: Integer -> [Integer] especiales n = [x | x <- [(10^n-1) `div` 9..10^n-1] , esEspecial x] esEspecial :: Integer -> Bool esEspecial x = notElem 0 digitos && x `mod` sum digitos == 0 where digitos = [read [d] | d <- show x] |
Primero definimos la función auxiliar digitos
y a continuación especiales