Pandigitales tridivisibles
El número 4106357289 tiene la siguientes dos propiedades:
- es pandigital, porque tiene todos los dígitos del 0 al 9 exactamente una vez y
- es tridivisible, porque los sucesivos subnúmeros de tres dígitos (a partir del segundo) son divisibles por los sucesivos números primos; es decir, representado por d(i) el i-ésimo dígito, se tiene
1 2 3 4 5 6 7 |
d(2)d(3)d(4) = 106 es divisible por 2 d(3)d(4)d(5) = 063 es divisible por 3 d(4)d(5)d(6) = 635 es divisible por 5 d(5)d(6)d(7) = 357 es divisible por 7 d(6)d(7)d(8) = 572 es divisible por 11 d(7)d(8)d(9) = 728 es divisible por 13 d(8)d(9)d(10) = 289 es divisible por 17 |
Definir la constante
1 |
pandigitalesTridivisibles :: [Integer] |
cuyos elementos son los números pandigitales tridivisibles. Por ejemplo,
1 2 |
head pandigitalesTridivisibles == 4106357289 sum pandigitalesTridivisibles == 16695334890 |
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 |
import Data.List ((\\)) pandigitalesTridivisibles :: [Integer] pandigitalesTridivisibles = [entero [d1,d2,d3,d4,d5,d6,d7,d8,d9,d10] | d2 <- [0..9] , d3 <- [0..9] \\ [d2] , d4 <- [0..9] \\ [d2,d3] , divisible [d2,d3,d4] 2 , d5 <- [0..9] \\ [d2,d3,d4] , divisible [d3,d4,d5] 3 , d6 <- [0..9] \\ [d2,d3,d4,d5] , divisible [d4,d5,d6] 5 , d7 <- [0..9] \\ [d2,d3,d4,d5,d6] , d8 <- [0..9] \\ [d2,d3,d4,d5,d6,d7] , divisible [d6,d7,d8] 11 , divisible [d5,d6,d7] 7 , d9 <- [0..9] \\ [d2,d3,d4,d5,d6,d7,d8] , divisible [d7,d8,d9] 13 , d10 <- [0..9] \\ [d2,d3,d4,d5,d6,d7,d8,d9] , divisible [d8,d9,d10] 17 , d1 <- [1..9] \\ [d2,d3,d4,d5,d6,d7,d8,d9,d10] ] -- (entero ns) es el número cuyos dígitos son ns. Por ejemplo, -- entero [3,2,5] == 325 entero :: [Integer] -> Integer entero = read . concatMap show divisible :: [Integer] -> Integer -> Bool divisible xs n = entero xs `mod` n == 0 |