{"id":2818,"date":"2017-01-16T06:00:35","date_gmt":"2017-01-16T04:00:35","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=2818"},"modified":"2022-03-26T12:11:43","modified_gmt":"2022-03-26T10:11:43","slug":"inversa-del-factorial","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/inversa-del-factorial\/","title":{"rendered":"Inversa del factorial"},"content":{"rendered":"<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   inversaFactorial :: Integer -> Maybe Integer\n<\/pre>\n<p>tal que (inversaFactorial x) es (Just n) si el factorial de n es x y es Nothing si no existe ning\u00fan n\u00famero n tal que el factorial de n es x. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   inversaFactorial 24  ==  Just 4\n   inversaFactorial 25  ==  Nothing\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\n-- 1\u00aa definici\u00f3n\n-- =============\n\ninversaFactorial :: Integer -> Maybe Integer\ninversaFactorial 1 = Just 1\ninversaFactorial x = aux 2 x\n  where aux n 1 = Just (n-1)\n        aux n y | y `mod` n == 0 = aux (n+1) (y `div` n)\n                | otherwise      = Nothing\n\n-- 2\u00aa definici\u00f3n\n-- =============\n\ninversaFactorial2 :: Integer -> Maybe Integer\ninversaFactorial2 x\n  | y == x   = Just n\n  |otherwise = Nothing  \n  where ((n,y):_) = dropWhile (\\(k,z) -> z < x) factorialesAnotados\n\n-- factorialesAnotados es la lista de los factoriales anotados con sus\n-- posiciones. Por ejemplo, \n--    take 5 factorialesAnotados  ==  [(0,1),(1,1),(2,2),(3,6),(4,24)]\nfactorialesAnotados :: [(Integer, Integer)]\nfactorialesAnotados = zip [0..] factoriales\n    \n-- factoriales es la lista de los factoriales. Por ejemplo,\n--    take 5 factoriales  ==  [1,1,2,6,24]\nfactoriales :: [Integer]\nfactoriales =\n  1 : scanl1 (*) [1..]\n\n-- Comparaci\u00f3n de eficiencia\n--    \u03bb> inversaFactorial (product [1..4*10^4])\n--    Just 40000\n--    (2.76 secs, 3,105,158,528 bytes)\n--    \u03bb> inversaFactorial2 (product [1..4*10^4])\n--    Just 40000\n--    (2.60 secs, 3,261,722,960 bytes)\n--\n--    \u03bb> inversaFactorial (1 + product [1..4*10^4])\n--    Nothing\n--    (1.80 secs, 1,626,433,432 bytes)\n--    \u03bb> inversaFactorial2 (1 + product [1..4*10^4])\n--    Nothing\n--    (2.56 secs, 3,257,388,296 bytes)\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Definir la funci\u00f3n inversaFactorial :: Integer -> Maybe Integer tal que (inversaFactorial x) es (Just n) si el factorial de n es x y es Nothing si no existe ning\u00fan n\u00famero n tal que el factorial de n es x. Por ejemplo, inversaFactorial 24 == Just 4 inversaFactorial 25 == Nothing Soluciones &#8212; 1\u00aa definici\u00f3n&#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":[500,30,59,89,11,6,252,9],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/2818"}],"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=2818"}],"version-history":[{"count":4,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/2818\/revisions"}],"predecessor-version":[{"id":2847,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/2818\/revisions\/2847"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=2818"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=2818"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=2818"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}