Un número primo es hereditario si todos los números obtenidos eliminando dígitos por la derecha o por la izquierda son primos. Por ejemplo, 3797 es hereditario ya que los números obtenidos eliminando dígitos por la derecha son 3797, 379, 37 y 3 y los obtenidos eliminando dígitos por la izquierda son 3797, 797, 97 y 7 y todos ellos son primos.
Definir la sucesión
hereditarios :: [Integer] |
cuyos elementos son los números hereditarios. Por ejemplo,
ghci> take 15 hereditarios [2,3,5,7,23,37,53,73,313,317,373,797,3137,3797,739397] |
Soluciones
import Data.List (inits, tails) import Data.Char (digitToInt) import Data.Numbers.Primes (primes, isPrime) hereditarios :: [Integer] hereditarios = [n | n <- primes, hereditario n] hereditario :: Integer -> Bool hereditario n = all odd (map digitToInt (tail ds)) && all isPrime (map read (tail (inits ds))) && all isPrime (map read (init (tails ds))) where ds = show n |