{"id":4623,"date":"2019-01-24T06:00:54","date_gmt":"2019-01-24T04:00:54","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=4623"},"modified":"2019-01-31T08:21:24","modified_gmt":"2019-01-31T06:21:24","slug":"numeros-primos-en-pi","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/numeros-primos-en-pi\/","title":{"rendered":"N\u00fameros primos en pi"},"content":{"rendered":"<p>El fichero <a href=\"Digitos_de_pi.txt\">Digitos_de_pi.txt<\/a> contiene el n\u00famero pi con un mill\u00f3n de decimales; es decir,<\/p>\n<pre lang=\"text\"> \n   3.1415926535897932384626433832 ... 83996346460422090106105779458151\n<\/pre>\n<p>Definir las funciones<\/p>\n<pre lang=\"text\"> \n   nOcurrenciasPrimosEnPi :: Int -> Int -> IO [Int]\n   graficaPrimosEnPi      :: Int -> Int -> IO ()\n<\/pre>\n<p>tales que<\/p>\n<ul>\n<li>(nOcurrenciasPrimosEnPi n k) es la lista de longitud n cuyo i-\u00e9simo elemento es el n\u00famero de ocurrencias del i-\u00e9simo n\u00famero primo en los k primeros decimales del n\u00famero pi. Por ejemplo,<\/li>\n<\/ul>\n<pre lang=\"text\"> \n   nOcurrenciasPrimosEnPi 4 20 == [2,3,3,1]\n<\/pre>\n<p>ya que los 20 primeros decimales de pi son 14159265358979323846 y en ellos ocurre el 2 dos veces, el 3 ocurre 3 veces, el 5 ocurre 3 veces y el 7 ocurre 1 vez. Otros ejemplos son<\/p>\n<pre lang=\"text\">  \n     \u03bb> nOcurrenciasPrimosEnPi 10 100\n     [12,11,8,8,1,0,1,1,2,0]\n     \u03bb> nOcurrenciasPrimosEnPi 10 (10^4)\n     [1021,974,1046,970,99,102,90,113,99,95]\n     \u03bb> nOcurrenciasPrimosEnPi 10 (10^6)\n     [100026,100229,100359,99800,10064,10012,9944,10148,9951,9912]\n<\/pre>\n<ul>\n<li>(graficaPrimosEnPi n k) dibuja la gr\u00e1fica del n\u00famero de ocurrencias de los n primeros n\u00fameros primos en los k primeros d\u00edgitos de pi. Por ejemplo, (graficaPrimosEnPi 10 (10^4)) dibuja<\/li>\n<\/ul>\n<p><a href=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/01\/Numeros_primos_en_pi_1010000.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/01\/Numeros_primos_en_pi_1010000.png?resize=640%2C480\" alt=\"\" width=\"640\" height=\"480\" class=\"aligncenter size-full wp-image-4626\" srcset=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/01\/Numeros_primos_en_pi_1010000.png?w=640&amp;ssl=1 640w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/01\/Numeros_primos_en_pi_1010000.png?resize=300%2C225&amp;ssl=1 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" data-recalc-dims=\"1\" \/><\/a><\/p>\n<p>(graficaPrimosEnPi 10 (10^6)) dibuja<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/01\/Numeros_primos_en_pi_101000000.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/01\/Numeros_primos_en_pi_101000000.png?resize=640%2C480\" alt=\"\" width=\"640\" height=\"480\" class=\"aligncenter size-full wp-image-4627\" srcset=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/01\/Numeros_primos_en_pi_101000000.png?w=640&amp;ssl=1 640w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/01\/Numeros_primos_en_pi_101000000.png?resize=300%2C225&amp;ssl=1 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" data-recalc-dims=\"1\" \/><\/a><\/p>\n<p>y (graficaPrimosEnPi 50 (10^5)) dibuja<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/01\/Numeros_primos_en_pi_50100000.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/01\/Numeros_primos_en_pi_50100000.png?resize=640%2C480\" alt=\"\" width=\"640\" height=\"480\" class=\"aligncenter size-full wp-image-4628\" srcset=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/01\/Numeros_primos_en_pi_50100000.png?w=640&amp;ssl=1 640w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/01\/Numeros_primos_en_pi_50100000.png?resize=300%2C225&amp;ssl=1 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" data-recalc-dims=\"1\" \/><\/a><\/p>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.List               ( isPrefixOf\n                               , findIndices\n                               , tails )\nimport Data.Numbers.Primes     ( primes)\nimport Graphics.Gnuplot.Simple ( Attribute (Key, PNG)\n                               , plotList )\n\n-- Definici\u00f3n de nOcurrenciasPrimosEnPi\n-- ====================================\n\nnOcurrenciasPrimosEnPi :: Int -> Int -> IO [Int]\nnOcurrenciasPrimosEnPi n k = do\n  (_:_:ds) <- readFile \"Digitos_de_pi.txt\"\n  let ps = take n primes\n  let es = take k ds\n  return [nOcurrencias (show x) es | x <- ps]\n\n-- (nOcurrencias xs yss) es el n\u00famero de ocurrencias de xs en yss. Por\n-- ejemplo,\n--    nOcurrencias \"ac\" \"acbadcacaac\"  ==  3\nnOcurrencias :: Eq a => [a] -> [a] -> Int\nnOcurrencias xs yss = length (ocurrencias xs yss)\n\n-- (ocurrencias xs yss) es el \u00edndice de las posiciones del primer\n-- elemento de xs en las ocurrencias de xs en yss. Por ejemplo,\n--    ocurrencias \"ac\" \"acbadcacaac\"  ==  [0,6,9]\nocurrencias :: Eq a => [a] -> [a] -> [Int]\nocurrencias xs yss =\n  findIndices (xs `isPrefixOf`) (tails yss)\n\n-- Definici\u00f3n de graficaPrimosEnPi\n-- ===============================\n\ngraficaPrimosEnPi :: Int -> Int -> IO ()\ngraficaPrimosEnPi n k = do\n  xs <- nOcurrenciasPrimosEnPi n k\n  plotList [ Key Nothing\n           , PNG (\"Numeros_primos_en_pi_\" ++ show (n,k) ++ \".png\")  \n           ]\n           xs\n<\/pre>\n<h4>Pensamiento<\/h4>\n<blockquote><p>\nAl borde del sendero un d\u00eda nos sentamos.<br \/>\nYa nuestra vida es tiempo, y nuestra sola cuita<br \/>\nson las desesperantes posturas que tomamos<br \/>\npara aguardar ... Mas ella no faltar\u00e1 a la cita.<\/p>\n<p>Antonio Machado\n<\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>El fichero Digitos_de_pi.txt contiene el n\u00famero pi con un mill\u00f3n de decimales; es decir, 3.1415926535897932384626433832 &#8230; 83996346460422090106105779458151 Definir las funciones nOcurrenciasPrimosEnPi :: Int -> Int -> IO [Int] graficaPrimosEnPi :: Int -> Int -> IO () tales que (nOcurrenciasPrimosEnPi n k) es la lista de longitud n cuyo i-\u00e9simo elemento es el n\u00famero de ocurrencias&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"footnotes":"","_jetpack_memberships_contains_paid_content":false},"categories":[4],"tags":[8,369,436,376,170,28,309,370,371,33,47],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/4623"}],"collection":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/comments?post=4623"}],"version-history":[{"count":8,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/4623\/revisions"}],"predecessor-version":[{"id":4673,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/4623\/revisions\/4673"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=4623"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=4623"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=4623"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}