{"id":5318,"date":"2020-01-02T05:30:02","date_gmt":"2020-01-02T03:30:02","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=5318"},"modified":"2020-01-15T08:19:47","modified_gmt":"2020-01-15T06:19:47","slug":"conjetura-de-grimm","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/conjetura-de-grimm\/","title":{"rendered":"Conjetura de Grimm"},"content":{"rendered":"<p>La <a href=\"http:\/\/bit.ly\/2EXdAPr\">conjetura de Grimm<\/a> establece que a cada elemento de un conjunto de n\u00fameros compuestos consecutivos se puede asignar un n\u00famero primo que lo divide, de forma que cada uno de los n\u00fameros primos elegidos es distinto de todos los dem\u00e1s. M\u00e1s formalmente, si n+1, n+2, &#8230;, n+k son n\u00fameros compuestos, entonces existen n\u00fameros primos p(i), distintos entre s\u00ed, tales que p(i) divide a n+i para 1 \u2264 i \u2264 k.<\/p>\n<p>Diremos que la lista ps = [p(1),&#8230;,p(k)] es una sucesi\u00f3n de Grim para la lista xs = [x(1),&#8230;,x(k)] si p(i) son n\u00fameros primos distintos y p(i) divide a x(i), para 1 \u2264 i \u2264 k. Por ejemplo, 2, 5, 13, 3, 7 es una sucesi\u00f3n de Grim de 24, 25, 26, 27, 28.<\/p>\n<p>Definir las funciones<\/p>\n<pre lang=\"text\">\n   compuestos :: Integer -> [Integer]\n   sucesionesDeGrim :: [Integer] -> [[Integer]]\n<\/pre>\n<p>tales que<\/p>\n<ul>\n<li>(compuestos n) es la mayor lista de n\u00fameros enteros consecutivos empezando en n. Por ejemplo, <\/li>\n<\/ul>\n<pre lang=\"text\">\n     compuestos 24  ==  [24,25,26,27,28]\n     compuestos  8  ==  [8,9,10]\n     compuestos 15  ==  [15,16]\n     compuestos 16  ==  [16]\n     compuestos 17  ==  []\n<\/pre>\n<ul>\n<li>(sucesionesDeGrim xs) es la lista de las sucesiones de Grim de xs. Por ejemplo, <\/li>\n<\/ul>\n<pre lang=\"text\">  \n     sucesionesDeGrim [15,16]          == [[3,2],[5,2]]\n     sucesionesDeGrim [8,9,10]         == [[2,3,5]]\n     sucesionesDeGrim [9,10]           == [[3,2],[3,5]]\n     sucesionesDeGrim [24,25,26,27,28] == [[2,5,13,3,7]]\n     sucesionesDeGrim [25,26,27,28]    == [[5,2,3,7],[5,13,3,2],[5,13,3,7]]\n<\/pre>\n<p>Comprobar con QuickCheck la conjetura de Grim; es decir, para todo n\u00famero n > 1, (sucesionesDeGrim (compuestos n)) es una lista no vac\u00eda.<\/p>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.List (nub)\nimport Data.Numbers.Primes (isPrime, primeFactors)\nimport Test.QuickCheck\n\ncompuestos :: Integer -> [Integer]\ncompuestos n = takeWhile (not . isPrime) [n..]\n\nsucesionesDeGrim :: [Integer] -> [[Integer]]\nsucesionesDeGrim [] = [[]]\nsucesionesDeGrim (x:xs) =\n  [y:ys | y <- divisoresPrimos x\n        , ys <- sucesionesDeGrim xs\n        , y `notElem` ys]\n\n-- (divisoresPrimos n) es la lista de los divisores primos de n. Por\n-- ejemplo, \n--    divisoresPrimos 60  ==  [2,3,5]\ndivisoresPrimos :: Integer -> [Integer]\ndivisoresPrimos = nub . primeFactors\n\n-- La propiedad es\nconjeturaDeGrim :: Integer -> Property\nconjeturaDeGrim n =\n  n > 1 ==> not (null (sucesionesDeGrim (compuestos n))) \n\n-- La comprobaci\u00f3n es\n--    \u03bb> quickCheck conjeturaDeGrim\n--    +++ OK, passed 100 tests.\n<\/pre>\n<h4>Pensamiento<\/h4>\n<blockquote><p>\nDe encinar en encinar<br \/>\nse va fatigando el d\u00eda.<\/p>\n<p>Antonio Machado\n<\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>La conjetura de Grimm establece que a cada elemento de un conjunto de n\u00fameros compuestos consecutivos se puede asignar un n\u00famero primo que lo divide, de forma que cada uno de los n\u00fameros primos elegidos es distinto de todos los dem\u00e1s. M\u00e1s formalmente, si n+1, n+2, &#8230;, n+k son n\u00fameros compuestos, entonces existen n\u00fameros primos&#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":[7],"tags":[8,174,415,181,27,24,141,11,247,6,34,146],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/5318"}],"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=5318"}],"version-history":[{"count":5,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/5318\/revisions"}],"predecessor-version":[{"id":5398,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/5318\/revisions\/5398"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=5318"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=5318"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=5318"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}