Infinitud de primos gemelos
Un par de números primos (p,q) es un par de números primos gemelos si su distancia de 2; es decir, si q = p+2. Por ejemplo, (17,19) es una par de números primos gemelos.
La conjetura de los primos gemelos postula la existencia de infinitos pares de primos gemelos.
Definir la constante
1 |
primosGemelos :: [(Integer,Integer)] |
tal que sus elementos son los pares de primos gemelos. Por ejemplo,
1 2 3 4 |
λ> take 7 primosGemelos [(3,5),(5,7),(11,13),(17,19),(29,31),(41,43),(59,61)] λ> primosGemelos !! (4*10^4) (6381911,6381913) |
Comprobar con QuickCheck la conjetura de los primos gemelos.
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 33 |
import Data.Numbers.Primes (primes, isPrime) import Test.QuickCheck -- 1ª solución primosGemelos :: [(Integer,Integer)] primosGemelos = [(x,x+2) | x <- primes, isPrime (x+2)] -- 2ª solución primosGemelos2 :: [(Integer,Integer)] primosGemelos2 = [(x,y) | (x,y) <- zip primes (tail primes) , y - x == 2] -- Comparación de eficiencia -- ========================= -- λ> primosGemelos !! (2*10^4) -- (2840447,2840449) -- (3.93 secs, 12,230,474,952 bytes) -- λ> primosGemelos2 !! (2*10^4) -- (2840447,2840449) -- (0.77 secs, 2,202,822,456 bytes) -- Propiedad -- ========= -- La propiedad es prop_primosGemelos :: Integer -> Property prop_primosGemelos n = n >= 0 ==> not (null [(x,y) | (x,y) <- primosGemelos2, x > n]) -- La comprobación es -- λ> quickCheck prop_primosGemelos -- +++ OK, passed 100 tests. |
Pensamiento
El sentimiento ha de tener tanto de individual como de genérico; debe orientarse hacia valores universales, o que pretenden serlo.
Antonio Machado
El segundo ejemplo no llega a hacerlo y falta la propiedad.