{"id":7087,"date":"2022-06-22T06:00:51","date_gmt":"2022-06-22T04:00:51","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=7087"},"modified":"2022-06-21T11:54:32","modified_gmt":"2022-06-21T09:54:32","slug":"calculo-de-la-suma-11-22-33-nn","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/calculo-de-la-suma-11-22-33-nn\/","title":{"rendered":"C\u00e1lculo de la suma 1*1! + 2*2! + 3*3! + &#8230; + n*n!"},"content":{"rendered":"<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   suma :: Integer -> Integer\n<\/pre>\n<p>tal que <code>(suma n)<\/code> es la suma <code>1\u00b71! + 2\u00b72! + 3\u00b73! + ... + n\u00b7n!<\/code>. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   suma 1  ==  1\n   suma 2  ==  5\n   suma 3  ==  23\n   suma 4  ==  119\n   suma 5  ==  719\n   take 9 (show (suma 70000))  ==  \"823780458\"\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Test.QuickCheck (Positive (Positive), quickCheck)\n\n-- 1\u00aa soluci\u00f3n\n-- ===========\n\nsuma1 :: Integer -> Integer\nsuma1 n = sum [k * factorial k | k <- [1..n]]\n\nfactorial :: Integer -> Integer\nfactorial n = product [1..n]\n\n-- 2\u00aa soluci\u00f3n\n-- ===========\n\nsuma2 :: Integer -> Integer\nsuma2 n = sum (zipWith (*) [1..n] factoriales)\n\nfactoriales :: [Integer]\nfactoriales = scanl (*) 1 [2..]\n\n-- 3\u00aa soluci\u00f3n\n-- ===========\n\n-- Basada en los siguientes c\u00e1lculos\n--    \u03bb> [suma1 n | n <- [0..10]]\n--    [0,1,5,23,119,719,5039,40319,362879,3628799,39916799]\n--    \u03bb> [factorial n | n <- [0..10]]\n--    [1,1,2,6,24,120,720,5040,40320,362880,3628800]\n--    \u03bb> [factorial n | n <- [1..11]]\n--    [1,2,6,24,120,720,5040,40320,362880,3628800,39916800]\n--    \u03bb> [factorial n - 1 | n <- [1..11]]\n--    [0,1,5,23,119,719,5039,40319,362879,3628799,39916799]\n\nsuma3 :: Integer -> Integer\nsuma3 n = factorial (n+1) - 1\n\n-- Comprobaci\u00f3n de equivalencia\n-- ============================\n\n-- La propiedad es\nprop_suma :: Positive Integer -> Bool\nprop_suma (Positive n) =\n  all (== suma1 n)\n      [suma2 n,\n       suma3 n]\n  \n-- La comprobaci\u00f3n es\n--    \u03bb> quickCheck prop_suma\n--    +++ OK, passed 100 tests.\n\n-- Comparaci\u00f3n de eficiencia\n-- =========================\n\n-- La comparaci\u00f3n es\n--    \u03bb> take 5 (show (suma1 4000))\n--    \"73170\"\n--    (5.04 secs, 16,225,195,448 bytes)\n--    \u03bb> take 5 (show (suma2 4000))\n--    \"73170\"\n--    (0.08 secs, 35,862,152 bytes)\n--    \u03bb> take 5 (show (suma3 4000))\n--    \"73170\"\n--    (0.01 secs, 12,896,968 bytes)\n--    \n--    \n--    \u03bb> take 5 (show (suma2 40000))\n--    \"83669\"\n--    (1.82 secs, 4,549,612,264 bytes)\n--    \u03bb> take 5 (show (suma3 40000))\n--    \"83669\"\n--    (0.24 secs, 1,620,976,984 bytes)\n<\/pre>\n<p>El c\u00f3digo se encuentra en <a href=\"https:\/\/github.com\/jaalonso\/Exercitium\/blob\/main\/src\/Calculo_de_la_suma_de_productos_de_numeros_por_factoriales.hs\">GitHub<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Definir la funci\u00f3n suma :: Integer -> Integer tal que (suma n) es la suma 1\u00b71! + 2\u00b72! + 3\u00b73! + &#8230; + n\u00b7n!. Por ejemplo, suma 1 == 1 suma 2 == 5 suma 3 == 23 suma 4 == 119 suma 5 == 719 take 9 (show (suma 70000)) == \u00ab823780458\u00bb Soluciones import&#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":[2],"tags":[578,521],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/7087"}],"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=7087"}],"version-history":[{"count":1,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/7087\/revisions"}],"predecessor-version":[{"id":7088,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/7087\/revisions\/7088"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=7087"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=7087"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=7087"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}