El sesgo de Chebyshev
Un número primo distinto de 2 tiene la forma 4k + 1 o 4k + 3. Chebyshev notó en 1853 que la mayoría de las veces hay más números primos de la forma 4k + 3 que números primos de la forma 4k + 1 menores que un número dado. Esto se llama el sesgo de Chebyshev.
Definir las funciones
1 2 3 4 |
distribucionPrimosModulo4 :: [(Integer, Integer, Integer)] empatesRestosModulo4 :: [Integer] mayoria1RestosModulo4 :: [Integer] grafica_Chebyshev :: Int -> IO () |
tales que
- distribucionPrimosModulo4 es la lista de las ternas (p,a,b) tales que p es un números primo, a es la cantidad de primos menores o iguales que p congruentes con 1 módulo 4 y b es la cantidad de primos menores o iguales que p congruentes con 3 módulo 4. Por ejemplo,
1 2 3 4 |
λ> take 7 distribucionPrimosModulo4 [(2,0,0),(3,0,1),(5,1,1),(7,1,2),(11,1,3),(13,2,3),(17,3,3)] λ> distribucionPrimosModulo4 !! (5*10^5) (7368791,249888,250112) |
- empatesRestosModulo4 es la lista de los primos p tales que la cantidad de primos menores o iguales que p congruentes con 1 módulo 4 es igual a la cantidad de primos menores o iguales que p congruentes con 3 módulo 4. Por ejemplo,
1 2 3 4 |
λ> take 10 empatesRestosModulo4 [2,5,17,41,461,26833,26849,26863,26881,26893] λ> length (takeWhile (<= 10^6) empatesRestosModulo4) 112 |
- mayoria1RestosModulo4 es la lista de los primos p tales que la cantidad de primos menores o iguales que p congruentes con 1 módulo 4 es mayor que la cantidad de primos menores o iguales que p congruentes con 3 módulo 4. Por ejemplo,
1 2 3 4 |
λ> take 10 mayoria1RestosModulo4 [26861,616841,616849,616877,616897,616909,616933,616943,616951,616961] λ> length (takeWhile (<= 10^6) mayoria1RestosModulo4) 239 |
- (graficaChebyshev n) dibuja la gráfica de los puntos (p,b-a) donde p es uno de los n primeros primos impares, a es la cantidad de primos menores o iguales que p congruentes con 1 módulo 4 y b es la cantidad de primos menores o iguales que p congruentes con 3 módulo 4. Por ejemplo, (graficaChebyshev 5000) dibuja la figura
Soluciones
[schedule expon=’2020-03-30′ expat=»06:00″]
- Las soluciones se pueden escribir en los comentarios.
- El código se debe escribir entre una línea con <pre lang="haskell"> y otra con </pre>
Pensamiento
«El valor de un problema no es tanto el de encontrar la respuesta como el de las ideas e intentos que obliga su resolución.»
[/schedule]
[schedule on=’2020-03-30′ at=»06:00″]
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 34 |
import Data.Numbers.Primes import Graphics.Gnuplot.Simple distribucionPrimosModulo4 :: [(Integer, Integer, Integer)] distribucionPrimosModulo4 = (2,0,0) : aux (tail primes) (0, 0) where aux (p:ps) (a,b) | p `mod` 4 == 1 = (p,a+1,b) : aux ps (a+1,b) | otherwise = (p,a,b+1) : aux ps (a,b+1) empatesRestosModulo4 :: [Integer] empatesRestosModulo4 = [p | (p,a,b) <- distribucionPrimosModulo4 , a == b] mayoria1RestosModulo4 :: [Integer] mayoria1RestosModulo4 = [p | (p,a,b) <- distribucionPrimosModulo4 , a > b] grafica :: Int -> IO () grafica n = plotLists [Key Nothing] [ [(p, a) | (p,a,b) <- xs] , [(p, b) | (p,a,b) <- xs] , [(p, b-a) | (p,a,b) <- xs]] where xs = take n (tail (distribucionPrimosModulo4)) graficaChebyshev :: Int -> IO () graficaChebyshev n = plotList [ Key Nothing , PNG "El_sesgo_de_Chebyshev.png" ] [(p, b-a) | (p,a,b) <- xs] where xs = take n (tail (distribucionPrimosModulo4)) |
Otras soluciones
- Se pueden escribir otras soluciones en los comentarios.
- El código se debe escribir entre una línea con <pre lang="haskell"> y otra con </pre>
[/schedule]