Números muy pares
Un entero positivo x es muy par si tanto x como x² sólo contienen cifras pares. Por ejemplo, 200 es muy par porque todas las cifras de 200 y 200² = 40000 son pares; pero 26 no lo es porque 26² = 676 tiene cifras impares.
Definir la función
1 |
siguienteMuyPar :: Integer -> Integer |
tal que (siguienteMuyPar x) es menor número mayor que x que es muy par. Por ejemplo,
1 2 3 |
siguienteMuyPar 300 == 668 siguienteMuyPar 668 == 680 siguienteMuyPar 828268400000 == 828268460602 |
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
siguienteMuyPar :: Integer -> Integer siguienteMuyPar x = head [n | n <- [y,y+2..], muyPar n] where y = siguientePar x -- (siguientePar x) es el primer número mayor que x que es par. Por -- ejemplo, -- siguientePar 3 == 4 -- siguientePar 4 == 6 siguientePar :: Integer -> Integer siguientePar x | odd x = x+1 | otherwise = x+2 -- (muyPar x) se verifica si x es muy par. Por ejemplo, -- muyPar 200 == True -- muyPar 26 == False muyPar :: Integer -> Bool muyPar n = all even (digitos n) && all even (digitos (n*n)) -- (digitos n) es la lista de los dígitos de n. Por ejemplo, -- digitos 325 == [3,2,5] digitos :: Integer -> [Int] digitos n = [read [d] | d <- show n] |
Añadir que el ultimo dígito del número muyPar es 0,2,8 no sirve en esta forma de calcular «siguienteMuyPar».