Números primos de Pierpont
Un número primo de Pierpont es un número primo de la forma , para u y v enteros no negativos.
Definir la sucesión
1 |
primosPierpont :: [Integer] |
tal que sus elementos son los números primos de Pierpont. Por ejemplo,
1 2 3 4 |
λ> take 20 primosPierpont [2,3,5,7,13,17,19,37,73,97,109,163,193,257,433,487,577,769,1153,1297] λ> primosPierpont !! 49 8503057 |
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import Data.Numbers.Primes (primes, primeFactors) primosPierpont :: [Integer] primosPierpont = [n | n <- primes , primoPierpont n] primoPierpont :: Integer -> Bool primoPierpont n = primeFactors (n-1) `contenidoEn` [2,3] -- (contenidoEn xs ys) se verifica si xs está contenido en ys. Por -- ejemplo, -- contenidoEn [2,3,2,2,3] [2,3] == True -- contenidoEn [2,3,2,2,1] [2,3] == False contenidoEn :: [Integer] -> [Integer] -> Bool contenidoEn xs ys = all (`elem` ys) xs |
Pensamiento
«La memoria es infiel: no sólo borra y confunde, sino que, a veces, inventa, para desorientarnos.»
Antonio Machado