Menu Close

Sucesión de raíces enteras de los números primos

Definir las siguientes funciones

   raicesEnterasPrimos :: [Integer]
   posiciones :: Integer -> (Int,Int)
   frecuencia :: Integer -> Int
   grafica_raicesEnterasPrimos :: Int -> IO ()
   grafica_posicionesIniciales :: Integer -> IO ()
   grafica_frecuencias :: Integer -> IO ()

tales que

  • raicesEnterasPrimos es la sucesión de las raíces enteras (por defecto) de los números primos. Por ejemplo,
     λ> take 20 raicesEnterasPrimos
     [1,1,2,2,3,3,4,4,4,5,5,6,6,6,6,7,7,7,8,8]
     λ> raicesEnterasPrimos !! 2500000
     6415
  • (posiciones x) es el par formado por la menor y la mayor posición de x en la sucesión de las raíces enteras de los números primos. Por ejemplo,
      posiciones 2     ==  (2,3)
      posiciones 4     ==  (6,8)
      posiciones 2017  ==  (287671,287931)
      posiciones 2018  ==  (287932,288208)
  • (frecuencia x) es el número de veces que aparece x en la sucesión de las raíces enteras de los números primos. Por ejemplo,
      frecuencia 2     ==  2
      frecuencia 4     ==  3
      frecuencia 2017  ==  261
      frecuencia 2018  ==  277
  • (grafica_raicesEnterasPrimos n) dibuja la gráfica de los n primeros términos de la sucesión de las raíces enteras de los números primos. Por ejemplo, (grafica_raicesEnterasPrimos 200) dibuja
    Sucesion_de_raices_enteras_de_primos_1
  • (grafica_posicionesIniciales n) dibuja la gráfica de las menores posiciones de los n primeros números en la sucesión de las raíces enteras de los números primos. Por ejemplo, (grafica_posicionesIniciales 200) dibuja
    Sucesion_de_raices_enteras_de_primos_2
  • (grafica_frecuencia n) dibuja la gráfica de las frecuencia de los n primeros números en la sucesión de las raíces enteras de los números primos. Por ejemplo, (grafica_frecuencia 200) dibuja
    Sucesion_de_raices_enteras_de_primos_3

Soluciones

import Data.Numbers.Primes (primes)
import Graphics.Gnuplot.Simple
 
raicesEnterasPrimos :: [Integer]
raicesEnterasPrimos = map raizEntera primes                       
 
raizEntera :: Integer -> Integer
raizEntera = floor . sqrt . fromIntegral
 
posiciones :: Integer -> (Int,Int)
posiciones x = (n,n+m-1)
  where (as,bs) = span (<x) raicesEnterasPrimos
        cs      = takeWhile (==x) bs 
        n       = length as
        m       = length cs
 
frecuencia :: Integer -> Int
frecuencia x =
  ( length
  . takeWhile (==x)
  . dropWhile (<x)
  ) raicesEnterasPrimos
 
grafica_raicesEnterasPrimos :: Int -> IO ()
grafica_raicesEnterasPrimos n = 
  plotList [ Title "Raices enteras de primos"
           , XLabel "Posiciones de numeros primos"
           , YLabel "Raiz entera del n-esimo primo"
           , Key Nothing
           , PNG "Sucesion_de_raices_enteras_de_primos_1.png"
           ]
           (take n raicesEnterasPrimos)
 
grafica_posicionesIniciales :: Integer -> IO ()
grafica_posicionesIniciales n = 
  plotList [ Title "Posiciones iniciales en raices enteras de primos"
           , XLabel "Numeros enteros"
           , YLabel "Posicion del numero n en las raices enteras de primos"
           , Key Nothing
           , PNG "Sucesion_de_raices_enteras_de_primos_2.png"
           ]
           (map (fst . posiciones) [1..n])
 
grafica_frecuencias :: Integer -> IO ()
grafica_frecuencias n = 
  plotList [ Title "Frecuencias en raices enteras de primos"
           , XLabel "Numeros enteros n"
           , YLabel "Frecuencia del numero n en las raices enteras de primos"
           , Key Nothing
           , PNG "Sucesion_de_raices_enteras_de_primos_3.png"
           ]
           (map frecuencia [1..n])

5 soluciones de “Sucesión de raíces enteras de los números primos

  1. alerodrod5
    import Data.Numbers.Primes (primes)
    import Graphics.Gnuplot.Simple
     
    raicesEnterasPrimos :: [Integer]
    raicesEnterasPrimos = map (floor . sqrt . fromIntegral) primes
     
    posiciones :: Integer -> (Int,Int)
    posiciones x = (head xs, last xs)
      where xs = posiciones2 x (takeWhile (<= x) raicesEnterasPrimos)
     
    posiciones2 :: Integer -> [Integer]-> [Int]
    posiciones2 x xs = [y | (n,y) <- posicion xs, n == x]
     
    posicion :: [Integer] -> [(Integer, Int)]
    posicion xs = [(x,y) | (x,y) <- zip xs [0..]]
     
    frecuencia :: Integer -> Int
    frecuencia x = snd n - fst n +1
      where n = posiciones x
     
    grafica_raicesEnterasPrimos :: Int -> IO ()
    grafica_raicesEnterasPrimos x =
      plotList [ Title "Raices enteras de primos"
               , XLabel "Posiciones de numeros primos"
               , YLabel "Raiz entera del n-esimo primo"
               , Key Nothing]
               (take x raicesEnterasPrimos)
     
    menoresPosiciones :: [Int]
    menoresPosiciones = map (fst . posiciones) [1..]
     
    grafica_posicionesIniciales :: Integer -> IO ()
    grafica_posicionesIniciales x =
      plotList [ Title "Posiciones iniciales en raices enteras de primos"
               , XLabel "Numeros enteros"
               , YLabel "Posicion del numero n en las raices enteras de primos"
               , Key Nothing]
               (take (fromIntegral x) menoresPosiciones)
     
    frecuencias :: [Int]
    frecuencias = map frecuencia [1..]
     
    grafica_frecuencias :: Integer -> IO ()
    grafica_frecuencias x =
      plotList [ Title "Frecuencias en raices enteras de primos"
               , XLabel "Numeros enteros n"
               , YLabel "Frecuencia del numero n en las raices enteras de primos"
               , Key Nothing]
               (take (fromIntegral x) frecuencias)
  2. carriomon1
    import Data.List
    import Data.Numbers.Primes
    import Graphics.Gnuplot.Simple
     
    raicesEnterasPrimos :: [Integer]
    raicesEnterasPrimos = map (toInteger . floor . sqrt . fromIntegral) primes 
     
    posiciones :: Integer -> (Int,Int)
    posiciones n = aux n (takeWhile (<=n) raicesEnterasPrimos)
      where aux n xs = ( head $ listaPosiciones n xs
                       , last $ listaPosiciones n xs )
     
    listaPosiciones :: Integer -> [Integer] -> [Int]
    listaPosiciones a bs  = elemIndices a bs
     
    frecuencia :: Integer -> Int
    frecuencia x =
      length $ aux x (takeWhile (<=x) raicesEnterasPrimos)
      where aux n xs = listaPosiciones n xs 
     
    grafica_raicesEnterasPrimos :: Int -> IO ()
    grafica_raicesEnterasPrimos n =
      plotList [ Title "Raices enteras de primos"
               , Key Nothing
               , XLabel "Posiciones de numeros primos"
               , YLabel "Raiz entera del n-esimo primo"]
               (take n raicesEnterasPrimos) 
     
    grafica_posicionesIniciales :: Integer -> IO ()
    grafica_posicionesIniciales n =
      plotList [ Title "Posiciones iniciales en raices enteras de primos"
               , Key Nothing
               , XLabel "Numeros enteros"
               , YLabel "Posicion del numero n en las raices enteras de primos"]
               (posicionMenor n)
     
    posicionMenor :: Integer -> [Int]
    posicionMenor n =
      [head $ listaPosiciones x raicesEnterasPrimos | x <- [1..n]]
     
    grafica_frecuencia :: Integer -> IO ()
    grafica_frecuencia n =
      plotList [ Title "Frecuencias en raices enteras de primos"
               , Key Nothing
               , XLabel "Numeros enteros n"
               , YLabel "Frecuencias del numero n en las raices enteras de primos"]
               ([frecuencia x | x <- [1..n]])
  3. menvealer
    posiciones :: Integer -> (Int,Int)
    posiciones n = (head xs, last xs)
      where xs = [a | (a,b) <- zip [0..] (takeWhile (<= n) raicesEnterasPrimos), b == n]
     
    frecuencia :: Integer -> Int
    frecuencia n = length $ dropWhile (/= n)(takeWhile (<= n) raicesEnterasPrimos)
    • esppercab

      He definido igual posiciones y frecuencia, y también raicesEnterasPrimos de la siguiente forma:

      raicesEnterasPrimos :: [Integer]
      raicesEnterasPrimos = map floor [sqrt x | x<- (map fromIntegral primes)]
  4. angruicam1
    import Data.Numbers.Primes (primes)
    import Data.List (elemIndices)
    import Graphics.Gnuplot.Simple (plotList,Attribute(Title,XLabel,YLabel,Key))
     
    raicesEnterasPrimos :: [Integer]
    raicesEnterasPrimos = map (floor . sqrt . fromIntegral) primes
     
    posiciones :: Integer -> (Int,Int)
    posiciones x = (y,last ys)
      where (y:ys) = elemIndices x . takeWhile (<= x) $ raicesEnterasPrimos
     
    frecuencia :: Integer -> Int
    frecuencia x =
      length . elemIndices x . takeWhile (<= x) $ raicesEnterasPrimos
     
    grafica_raicesEnterasPrimos :: Int -> IO ()
    grafica_raicesEnterasPrimos n =
      plotList [Title "Raices enteras de primos"
               ,XLabel "Posiciones de los numeros primos"
               ,YLabel "Raiz entera del n-esimo primo"
               ,Key Nothing] (take n raicesEnterasPrimos)
     
    grafica_posicionesIniciales :: Integer -> IO ()
    grafica_posicionesIniciales n =
      plotList [Title "Posiciones iniciales en raices enteras de primos"
               ,XLabel "Numeros enteros"
               ,YLabel "Posicion del numero n en las raices enteras de primos"
               ,Key Nothing] (map (fst . posiciones) [1..n])
     
    grafica_frecuencias :: Integer -> IO ()
    grafica_frecuencias n =
      plotList [Title "Frecuencia en raices enteras de primos"
               ,XLabel "Numeros enteros n"
               ,YLabel "Frecuencia del numero n en las raices enteras de primos"
               ,Key Nothing] (map frecuencia [1..n])

Leave a Reply

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.