Un número omirp es un número primo que forma un primo distinto al invertir el orden de sus dígitos.
Definir las funciones
esOmirp :: Integer -> Bool
omirps :: [Integer]
nOmirpsIntermedios :: Int -> Int |
esOmirp :: Integer -> Bool
omirps :: [Integer]
nOmirpsIntermedios :: Int -> Int
tales que
- (esOmirp n) se verifica si n es un número omirp. Por ejemplo,
esOmirp 13 == True
esOmirp 11 == False
esOmirp 112207 == True |
esOmirp 13 == True
esOmirp 11 == False
esOmirp 112207 == True
- omirps es la lista de los números omirps. Por ejemplo,
take 15 omirps == [13,17,31,37,71,73,79,97,107,113]
omirps !! 2000 == 112207 |
take 15 omirps == [13,17,31,37,71,73,79,97,107,113]
omirps !! 2000 == 112207
- (nOmirpsIntermedios n) es la cantidad de números omirps entre el n-ésimo número omirp y el obtenido al invertir el orden de sus dígitos. Por ejemplo,
nOmirpsIntermedios 2000 == 4750 |
nOmirpsIntermedios 2000 == 4750
Nota: Este ejercicio ha sido propuesto por Ángel Ruiz Campos.
Soluciones
import Data.Numbers.Primes (isPrime,primes)
esOmirp :: Integer -> Bool
esOmirp n = n /= rn && isPrime rn
where rn = read . reverse . show $ n
omirps :: [Integer]
omirps = filter esOmirp primes
nOmirpsIntermedios :: Int -> Int
nOmirpsIntermedios n =
length
. filter esOmirp
. takeWhile (< rx)
. dropWhile (<= x) $ primes
where x = omirps !! n
rx = read . reverse . show $ x |
import Data.Numbers.Primes (isPrime,primes)
esOmirp :: Integer -> Bool
esOmirp n = n /= rn && isPrime rn
where rn = read . reverse . show $ n
omirps :: [Integer]
omirps = filter esOmirp primes
nOmirpsIntermedios :: Int -> Int
nOmirpsIntermedios n =
length
. filter esOmirp
. takeWhile (< rx)
. dropWhile (<= x) $ primes
where x = omirps !! n
rx = read . reverse . show $ x
Se puede imprimir o compartir con
<
pre lang=”haskell”>
import Data.Numbers.Primes
esOmirp :: Integer -> Bool
esOmirp n = n /= inv && isPrime inv
where
inv = (read . reverse . show) n
omirps :: [Integer]
omirps = filter esOmirp primes
nOmirpsIntermedios :: Int -> Int
nOmirpsIntermedios n = abs (n – length (takeWhile (<inv) omirps)) – 1
where
inv = (read . reverse . show) (omirps!!n)