{"id":1726,"date":"2015-11-17T06:00:34","date_gmt":"2015-11-17T04:00:34","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=1726"},"modified":"2022-03-26T12:12:57","modified_gmt":"2022-03-26T10:12:57","slug":"productos-de-n-numeros-consecutivos","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/productos-de-n-numeros-consecutivos\/","title":{"rendered":"Productos de N n\u00fameros consecutivos"},"content":{"rendered":"<p>La semana pasada se plante\u00f3 en <a href=\"http:\/\/bit.ly\/1StIqxJ\">Twitter<\/a> el siguiente problema<\/p>\n<blockquote><p>\n  Se observa que\n<\/p><\/blockquote>\n<pre lang=\"text\">\n      1x2x3x4 = 2x3x4 \n      2x3x4x5 = 4x5x6\n<\/pre>\n<blockquote><p>\n  \u00bfExisten ejemplos de otros productos de cuatro enteros consecutivos iguales a un producto de tres enteros consecutivos?\n<\/p><\/blockquote>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   esProductoDeNconsecutivos :: Integer -> Integer -> Maybe Integer\n<\/pre>\n<p>tal que (esProductoDeNconsecutivos n x) es (Just m) si x es el producto de n enteros consecutivos a partir de m y es Nothing si x no es el producto de n enteros consecutivos. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   esProductoDeNconsecutivos 3   6  == Just 1\n   esProductoDeNconsecutivos 4   6  == Nothing\n   esProductoDeNconsecutivos 4  24  == Just 1\n   esProductoDeNconsecutivos 3  24  == Just 2\n   esProductoDeNconsecutivos 3 120  == Just 4\n   esProductoDeNconsecutivos 4 120  == Just 2\n<\/pre>\n<p>Para ejemplos mayores,<\/p>\n<pre lang=\"text\">\n   \u03bb> esProductoDeNconsecutivos 3 (product [10^20..2+10^20])\n   Just 100000000000000000000\n   \u03bb> esProductoDeNconsecutivos2 4 (product [10^20..2+10^20])\n   Nothing\n   \u03bb> esProductoDeNconsecutivos2 4 (product [10^20..3+10^20])\n   Just 100000000000000000000\n<\/pre>\n<p>Usando la funci\u00f3n esProductoDeNconsecutivos resolver el problema.<\/p>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.Maybe\n\n-- 1\u00aa definici\u00f3n\nesProductoDeNconsecutivos1 :: Integer -> Integer -> Maybe Integer\nesProductoDeNconsecutivos1 n x \n    | null productos = Nothing\n    | otherwise      = Just (head productos)\n    where productos = [m | m <- [1..x-n], product [m..m+n-1] == x]\n\n-- 2\u00aa definici\u00f3n\nesProductoDeNconsecutivos2 :: Integer -> Integer -> Maybe Integer\nesProductoDeNconsecutivos2 n x = aux k\n    where k = floor (fromIntegral x ** (1\/(fromIntegral n))) - (n `div` 2)\n          aux m | y == x    = Just m\n                | y <  x    = aux (m+1)\n                | otherwise = Nothing\n                where y = product [m..m+n-1]\n\n-- Comparaci\u00f3n de eficiencia\n--    \u03bb> esProductoDeNconsecutivos1 3 (product [10^7..2+10^7])\n--    Just 10000000\n--    (12.37 secs, 5678433692 bytes)\n--    \u03bb> esProductoDeNconsecutivos2 3 (product [10^7..2+10^7])\n--    Just 10000000\n--    (0.00 secs, 1554932 bytes)\n\n-- Soluci\u00f3n del problema\n-- =====================\n\nsoluciones :: [Integer]\nsoluciones = [x | x <- [121..]\n                , isJust (esProductoDeNconsecutivos2 4 x)\n                , isJust (esProductoDeNconsecutivos2 3 x)]\n\n-- El c\u00e1lculo es\n--    \u03bb> head soluciones\n--    175560\n--    \u03bb> esProductoDeNconsecutivos2 4 175560\n--    Just 19\n--    \u03bb> esProductoDeNconsecutivos2 3 175560\n--    Just 55\n--    \u03bb> product [19,20,21,22] \n--    175560\n--    \u03bb> product [55,56,57]\n--    175560\n--    \u03bb> product [19,20,21,22] == product [55,56,57]\n--    True\n\n-- Se puede definir una funci\u00f3n para automatizar el proceso anterior:\nsoluciones2 :: [(Integer,[Integer],[Integer])]\nsoluciones2 = [(x,[a..a+3],[b..b+2]) \n               | x <- [121..]\n               , let y = esProductoDeNconsecutivos2 4 x\n               , isJust y\n               , let z = esProductoDeNconsecutivos2 3 x\n               , isJust z\n               , let a = fromJust y\n               , let b = fromJust z\n               ]\n\n-- El c\u00e1lculo es \n--    \u03bb> head soluciones2\n--    (175560,[19,20,21,22],[55,56,57])\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>La semana pasada se plante\u00f3 en Twitter el siguiente problema Se observa que 1x2x3x4 = 2x3x4 2x3x4x5 = 4x5x6 \u00bfExisten ejemplos de otros productos de cuatro enteros consecutivos iguales a un producto de tres enteros consecutivos? Definir la funci\u00f3n esProductoDeNconsecutivos :: Integer -> Integer -> Maybe Integer tal que (esProductoDeNconsecutivos n x) es (Just m)&#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,500,30,59,183,71,11,157,6,184],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/1726"}],"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=1726"}],"version-history":[{"count":10,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/1726\/revisions"}],"predecessor-version":[{"id":1796,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/1726\/revisions\/1796"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=1726"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=1726"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=1726"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}