{"id":455,"date":"2010-08-25T10:10:55","date_gmt":"2010-08-25T10:10:55","guid":{"rendered":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/relacion-entre-el-numero-e-y-los-numeros-primos-en-haskell\/"},"modified":"2013-03-08T05:53:41","modified_gmt":"2013-03-08T05:53:41","slug":"relacion-entre-el-numero-e-y-los-numeros-primos-en-haskell","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/relacion-entre-el-numero-e-y-los-numeros-primos-en-haskell\/","title":{"rendered":"Relaci\u00f3n entre el n\u00famero e y los n\u00fameros primos en Haskell"},"content":{"rendered":"<p>\nEn el art\u00edculo <a href=\"http:\/\/gaussianos.com\/\u00bfque-tiene-que-ver-el-numero-e-con-los-numeros-primos\">\u00bfQu\u00e9 tiene que ver el n\u00famero e con los n\u00fameros primos?<\/a> de <a href=\"http:\/\/gaussianos.com\">Gaussianos<\/a> se comenta una curiosa relaci\u00f3n entre los n\u00fameros primos y el n\u00famero <img decoding=\"async\" src=\"https:\/\/s0.wp.com\/latex.php?latex=e&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002\" alt=\"e\" class=\"latex\" \/>. Dicha relaci\u00f3n se expresa mediante la f\u00f3rmula<br \/>\n<center><br \/>\n<img decoding=\"async\" src=\"https:\/\/s0.wp.com\/latex.php?latex=+e+%3D+%5Cdisplaystyle%5Clim_%7Bn+%5Cto%7B%2B%7D%5Cinfty%7D%5Cdisplaystyle%5Csqrt%5Bp_n%5D%7B%5Cdisplaystyle%5Cprod_%7Bi%3D1%7D%5En+p_i%7D&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002\" alt=\" e = &#92;displaystyle&#92;lim_{n &#92;to{+}&#92;infty}&#92;displaystyle&#92;sqrt[p_n]{&#92;displaystyle&#92;prod_{i=1}^n p_i}\" class=\"latex\" \/><br \/>\n<\/center><br \/>\ndonde <img decoding=\"async\" src=\"https:\/\/s0.wp.com\/latex.php?latex=p_i&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002\" alt=\"p_i\" class=\"latex\" \/> es el <img decoding=\"async\" src=\"https:\/\/s0.wp.com\/latex.php?latex=i&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002\" alt=\"i\" class=\"latex\" \/>-\u00e9simo n\u00famero primo.<\/p>\n<p>\nA partir del art\u00edculo, he dise\u00f1ado este ejercicio de <A href=\"http:\/\/en.wikipedia.org\/wiki\/Haskell_(programming_language)\">Haskell<\/a> para <a href=\"http:\/\/www.cs.us.es\/~jalonso\/cursos\/i1m\/\">Inform\u00e1tica (del Grado de Matem\u00e1ticas)<\/a>. <\/p>\n<p>\nEl objetivo del ejercicio es la comprobaci\u00f3n de la f\u00f3rmula anterior.<br \/>\n<!--more--><\/p>\n<pre lang=\"haskell\">\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 1. Definir la funci\u00f3n\r\n--    criba :: [Integer] -> [Integer]\r\n-- tal que (criba xs) es la lista formada por el primer elemento de xs y\r\n-- los restantes elementos de xs que no son m\u00faltiplos del primero. Por\r\n-- ejemplo, \r\n--    criba [2..20]  ==  [2,3,5,7,11,13,17,19]\r\n-- ---------------------------------------------------------------------\r\n\r\ncriba :: [Integer] -> [Integer]\r\ncriba (p:xs) = p : criba [x | x <- xs, x `mod` p \/= 0]\r\ncriba []     = []\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 2. Definir la constante\r\n--    primos :: [Integer]\r\n-- tal que primos es la lista de los n\u00fameros primos, obtenida mediante\r\n-- la criba de Erast\u00f3tenes. Por ejemplo,\r\n--    take 10 primos == [2,3,5,7,11,13,17,19,23,29]\r\n-- ---------------------------------------------------------------------\r\n\r\nprimos :: [Integer]\r\nprimos = criba [2..]\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 3. Definir la funci\u00f3n\r\n--    productos :: [Integer] -> [Integer]\r\n-- tal que (productos xs) es la lista cuyo elemento i-\u00e9simo es el\r\n-- producto de los primeros i elementos de la lista xs. Por ejemplo, \r\n--    productos [2,5,3]  ==  [2,10,30]\r\n-- ---------------------------------------------------------------------\r\n\r\nproductos :: [Integer] -> [Integer]\r\nproductos = scanl1 (*) \r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 4. Definir la funci\u00f3n\r\n--    raices :: [Integer] -> [Integer] -> [Double]\r\n-- tal que (raices xs ys) es la lista cuyo elemento i-\u00e9simo es la raiz\r\n-- n-\u00e9sima (donde n es el elemento i-\u00e9simo) de ys del elemento i-\u00e9simo\r\n-- de xs. Por ejemplo,\r\n--    raices [9,16] [2,4]  ==  [3.0,2.0]\r\n-- ---------------------------------------------------------------------\r\n\r\nraices :: [Integer] -> [Integer] -> [Double]\r\nraices xs ys = [raiz x y | (x,y) <- zip xs ys]\r\n    where raiz x y = (fromIntegral x)**(1\/fromIntegral y)\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 5. Definir la constante\r\n--    aproximaciones :: [Double]\r\n-- tal que aproximaxiones es la lista cuyo elemento n-\u00e9simo es la raiz x\r\n-- de y, donde x es el primo n-\u00e9simo e y es el producto de los n\r\n-- primeros primos. Por ejemplo, \r\n--    *Main> aproximaciones !! 3\u00ba\r\n--    2.1465727583654437\r\n--    *Main> (2*3*5*7)**(1\/7)\r\n--    2.1465727583654437\r\n--    *Main> take 10 aproximaciones\r\n--    [1.4142135623730951, 1.8171205928321397, 1.97435048583482,\r\n--     2.1465727583654437, 2.0220081756858095, 2.2101784152470247,\r\n--     2.166531242132804,  2.331976113436929,  2.3066284202455836,\r\n--     2.179246384231885,  2.3152002502547053, 2.2276652067865403]\r\n-- ---------------------------------------------------------------------\r\n\r\naproximaciones :: [Double]\r\naproximaciones = raices (productos primos) primos\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 6. Definir la funci\u00f3n\r\n--    diferencias :: [Double]\r\n-- tal que diferencias es la lista de las diferencias entre el n\u00famero e\r\n-- y los elementos de aproximaciones. Por ejemplo,\r\n--    *Main> take 9 (drop 100 diferencias)\r\n--    [0.16791998034067301, 0.18180048551530215, 0.17842552082790863,\r\n--     0.17507000227890757, 0.15503537816766544, 0.15187848954545435,\r\n--     0.16517883928217003, 0.16189887057697439, 0.15863750404991395]\r\n-- ---------------------------------------------------------------------\r\n\r\ndiferencias :: [Double]\r\ndiferencias = [e - x | x <- aproximaciones]\r\n              where e = exp 1\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 7. Conjeturar cu\u00e1l es el l\u00edmite de las aproximaciones.\r\n-- ---------------------------------------------------------------------\r\n\r\n-- Soluci\u00f3n: El l\u00edmite de las aproximaciones es el n\u00famero e. \r\n\r\n-- ---------------------------------------------------------------------\r\n-- Nota. Una demostraci\u00f3n de que el l\u00edmite de las aproximaciones es el\r\n-- n\u00famero e se encuentra en el art\u00edculo \"\u00bfQu\u00e9 tiene que ver el n\u00famero e\r\n-- con los n\u00fameros primos?\" que se puede leer en\r\n-- http:\/\/gaussianos.com\/\u00bfque-tiene-que-ver-el-numero-e-con-los-numeros-primos \r\n-- ---------------------------------------------------------------------\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>En el art\u00edculo \u00bfQu\u00e9 tiene que ver el n\u00famero e con los n\u00fameros primos? de Gaussianos se comenta una curiosa relaci\u00f3n entre los n\u00fameros primos y el n\u00famero . Dicha relaci\u00f3n se expresa mediante la f\u00f3rmula donde es el -\u00e9simo n\u00famero primo. A partir del art\u00edculo, he dise\u00f1ado este ejercicio de Haskell para Inform\u00e1tica (del&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","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":[5],"tags":[270,104],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":false,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/455"}],"collection":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/comments?post=455"}],"version-history":[{"count":7,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/455\/revisions"}],"predecessor-version":[{"id":3031,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/455\/revisions\/3031"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/media?parent=455"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/categories?post=455"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/tags?post=455"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}