{"id":3841,"date":"2018-03-07T06:00:02","date_gmt":"2018-03-07T04:00:02","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=3841"},"modified":"2018-03-14T07:49:01","modified_gmt":"2018-03-14T05:49:01","slug":"suma-de-las-sumas-de-los-cuadrados-de-los-divisores","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/suma-de-las-sumas-de-los-cuadrados-de-los-divisores\/","title":{"rendered":"Suma de las sumas de los cuadrados de los divisores"},"content":{"rendered":"<p>La suma de las sumas de los cuadrados de los divisores de los 6 primeros n\u00fameros enteros positivos es<\/p>\n<pre lang=\"text\">\n     1\u00b2 + (1\u00b2+2\u00b2) + (1\u00b2+3\u00b2) + (1\u00b2+2\u00b2+4\u00b2) + (1\u00b2+5\u00b2) + (1\u00b2+2\u00b2+3\u00b2+6\u00b2)\n   = 1  + 5       + 10      + 21         + 26      + 50\n   = 113\n<\/pre>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   sumaSumasCuadradosDivisores :: Integer -> Integer\n<\/pre>\n<p>tal que (sumaSumasCuadradosDivisores n) es la suma de las sumas de los cuadrados de los divisores de los n primeros n\u00fameros enteros positivos. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   sumaSumasCuadradosDivisores 6       ==  113\n   sumaSumasCuadradosDivisores (10^6)  ==  400686363385965077\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.List (genericIndex)\n\n-- 1\u00aa soluci\u00f3n\n-- ===========\n\nsumaSumasCuadradosDivisores :: Integer -> Integer\nsumaSumasCuadradosDivisores n =\n  sum [sumaCuadradosDivisores k | k <- [1..n]]\n\n-- (sumaCuadradosDivisores n) es la suma de los cuadrados de los\n-- divisores de n. Por ejemplo,\n--    sumaCuadradosDivisores 6  ==  50\nsumaCuadradosDivisores :: Integer -> Integer\nsumaCuadradosDivisores n = sum (map (^2) (divisores n))\n\n-- (divisores n) es la lista de los divisores de n. Por ejemplo, \n--    divisores 6  ==  [1,6,2,3]\ndivisores :: Integer -> [Integer]\ndivisores 1 = [1]\ndivisores n = 1 : n : [x | x <- [2..n `div` 2], n `mod` x == 0]\n\n-- 2\u00aa soluci\u00f3n\n-- ===========\n\nsumaSumasCuadradosDivisores2 :: Integer -> Integer\nsumaSumasCuadradosDivisores2 n =\n  sumasSumasCuadradosDivisores `genericIndex` (n-1)\n\n-- sumasSumasCuadradosDivisores es la sucesi\u00f3n cuyo n-\u00e9simo t\u00e9rmino es\n-- la suma de las sumas de los cuadrados de los divisores de n. Por\n-- ejemplo, \n--    take 6 sumasSumasCuadradosDivisores  ==  [1,6,16,37,63,113]\nsumasSumasCuadradosDivisores :: [Integer]\nsumasSumasCuadradosDivisores = 1 : sig 1 2\n  where sig m n = y : sig y (n+1)\n          where y = m + sumaCuadradosDivisores n\n\n-- 3\u00aa soluci\u00f3n\n-- ===========\n\nsumaSumasCuadradosDivisores3 :: Integer -> Integer\nsumaSumasCuadradosDivisores3 n =\n  last (sumasSumasCuadradosDivisores3 n)\n\n-- (sumasSumasCuadradosDivisores3 n) es la sucesi\u00f3n cuyo k-\u00e9simo t\u00e9rmino\n-- es la suma de las sumas de los cuadrados de los divisores de k, para\n-- k entre 0 y n. Por ejemplo, \n--    sumasSumasCuadradosDivisores3 6  ==  [0,6,18,36,52,77,113]\nsumasSumasCuadradosDivisores3 :: Integer -> [Integer]\nsumasSumasCuadradosDivisores3 n = scanl f 0 [1..n]\n  where f x k = x + k^2 * (n `div` k)\n\n-- 4\u00aa soluci\u00f3n\n-- ===========\n\nsumaSumasCuadradosDivisores4 :: Integer -> Integer\nsumaSumasCuadradosDivisores4 n =\n  last (sumasSumasCuadradosDivisores4 n)\n\n-- (sumasSumasCuadradosDivisores4 n) es la sucesi\u00f3n cuyo k-\u00e9simo t\u00e9rmino\n-- es la suma de las sumas de los cuadrados de los divisores de k, para\n-- k entre 0 y n. Por ejemplo, \n--    sumasSumasCuadradosDivisores4 6  ==  [0,6,18,36,52,77,113]\nsumasSumasCuadradosDivisores4 :: Integer -> [Integer]\nsumasSumasCuadradosDivisores4 n = scanl1 f [0,1..n]\n  where f x k = x + k^2 * (n `div` k)\n\n-- 5\u00aa soluci\u00f3n\n-- ===========\n\nsumaSumasCuadradosDivisores5 :: Integer -> Integer\nsumaSumasCuadradosDivisores5 n =\n  last (sumasSumasCuadradosDivisores5 n)\n\n-- (sumasSumasCuadradosDivisores5 n) es la sucesi\u00f3n cuyo k-\u00e9simo t\u00e9rmino\n-- es la suma de las sumas de los cuadrados de los divisores de k, para\n-- k entre 0 y n. Por ejemplo, \n--    sumasSumasCuadradosDivisores5 6  ==  [0,6,18,36,52,77,113]\nsumasSumasCuadradosDivisores5 :: Integer -> [Integer]\nsumasSumasCuadradosDivisores5 n = scanl1 f [0,1..n]\n  where f x k = x + k * (n - (n `mod` k))\n\n-- 6\u00aa soluci\u00f3n\n-- ===========\n\n-- Cada elemento k de [1..n], al cuadrado, aparece tantas veces como la\n-- parte entera de n\/k; luego,\n--    sumaSumasCuadradosDivisores n =\n--       1^2*n + 2^2*(n `div` 2) + 3^2*(n `div` 3) + ... + n^2*1\n\nsumaSumasCuadradosDivisores6 :: Integer -> Integer\nsumaSumasCuadradosDivisores6 n = sum (zipWith (*) ds vs)\n  where ds = map (^2) [1..n]\n        vs = [n `div` k | k <- [1..n]]\n\n-- Comparaci\u00f3n de eficiencia:\n-- =========================\n\n--    \u03bb> sumaSumasCuadradosDivisores (3*10^3)\n--    10825397502\n--    (3.29 secs, 468,721,192 bytes)\n--    \u03bb> sumaSumasCuadradosDivisores2 (3*10^3)\n--    10825397502\n--    (3.25 secs, 469,462,600 bytes)\n--    \u03bb> sumaSumasCuadradosDivisores3 (3*10^3)\n--    10825397502\n--    (0.03 secs, 2,788,752 bytes)\n--    \u03bb> sumaSumasCuadradosDivisores4 (3*10^3)\n--    10825397502\n--    (0.03 secs, 2,813,304 bytes)\n--    \u03bb> sumaSumasCuadradosDivisores5 (3*10^3)\n--    10825397502\n--    (0.03 secs, 1,467,056 bytes)\n--    \u03bb> sumaSumasCuadradosDivisores6 (3*10^3)\n--    10825397502\n--    (0.03 secs, 3,291,664 bytes)\n--    \n--    \u03bb> sumaSumasCuadradosDivisores3 (5*10^5)\n--    50085873311988831\n--    (2.34 secs, 440,961,640 bytes)\n--    \u03bb> sumaSumasCuadradosDivisores4 (5*10^5)\n--    50085873311988831\n--    (2.29 secs, 444,962,904 bytes)\n--    \u03bb> sumaSumasCuadradosDivisores5 (5*10^5)\n--    50085873311988831\n--    (1.23 secs, 220,960,152 bytes)\n--    \u03bb> sumaSumasCuadradosDivisores6 (5*10^5)\n--    50085873311988831\n--    (2.76 secs, 524,962,464 bytes)\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>La suma de las sumas de los cuadrados de los divisores de los 6 primeros n\u00fameros enteros positivos es 1\u00b2 + (1\u00b2+2\u00b2) + (1\u00b2+3\u00b2) + (1\u00b2+2\u00b2+4\u00b2) + (1\u00b2+5\u00b2) + (1\u00b2+2\u00b2+3\u00b2+6\u00b2) = 1 + 5 + 10 + 21 + 26 + 50 = 113 Definir la funci\u00f3n sumaSumasCuadradosDivisores :: Integer -> Integer tal que (sumaSumasCuadradosDivisores&#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,30,256,134,10,89,11,6,78,252,40,76],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3841"}],"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=3841"}],"version-history":[{"count":2,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3841\/revisions"}],"predecessor-version":[{"id":3870,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3841\/revisions\/3870"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=3841"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=3841"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=3841"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}