{"id":7024,"date":"2022-05-17T10:32:36","date_gmt":"2022-05-17T08:32:36","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=7024"},"modified":"2022-05-17T10:36:42","modified_gmt":"2022-05-17T08:36:42","slug":"sucesion-de-sumas-de-dos-numeros-abundantes","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/sucesion-de-sumas-de-dos-numeros-abundantes\/","title":{"rendered":"Sucesi\u00f3n de sumas de dos n\u00fameros abundantes"},"content":{"rendered":"<p>Un n\u00famero <code>n<\/code> es <a href=\"http:\/\/bit.ly\/1vySpf2\">abundante<\/a> si la suma de los divisores propios de <code>n<\/code> es mayor que <code>n<\/code>. El primer n\u00famero abundante es el 12 (cuyos divisores propios son 1, 2, 3, 4 y 6 cuya suma es 16). Por tanto, el menor n\u00famero que es la suma de dos n\u00fameros abundantes es el 24.<\/p>\n<p>Definir la sucesi\u00f3n<\/p>\n<pre lang=\"text\">\n   sumasDeDosAbundantes :: [Integer]\n<\/pre>\n<p>cuyos elementos son los n\u00fameros que se pueden escribir como suma de dos n\u00fameros abundantes. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   take 10 sumasDeDosAbundantes  ==  [24,30,32,36,38,40,42,44,48,50]\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.List (genericLength, group)\nimport Data.Numbers.Primes (primeFactors)\nimport Test.QuickCheck\n\n-- 1\u00aa soluci\u00f3n\n-- ===========\n\nsumasDeDosAbundantes1 :: [Integer]\nsumasDeDosAbundantes1 = [n | n <- [1..], esSumaDeDosAbundantes n]\n\n-- (esSumaDeDosAbundantes n) se verifica si n es suma de dos n\u00fameros\n-- abundantes. Por ejemplo,\n--    esSumaDeDosAbundantes 24           ==  True\n--    any esSumaDeDosAbundantes [1..22]  ==  False\nesSumaDeDosAbundantes :: Integer -> Bool\nesSumaDeDosAbundantes n = (not . null) [x | x <- xs, n-x `elem` xs]\n  where xs = takeWhile (<n) abundantes\n\n-- abundantes es la lista de los n\u00fameros abundantes. Por ejemplo,\n--    take 10 abundantes  ==  [12,18,20,24,30,36,40,42,48,54]\nabundantes :: [Integer]\nabundantes = [n | n <- [2..], abundante n]\n\n-- (abundante n) se verifica si n es abundante. Por ejemplo,\n--    abundante 12  ==  True\n--    abundante 11  ==  False\nabundante :: Integer -> Bool\nabundante n = sum (divisores n) > n\n\n-- (divisores n) es la lista de los divisores propios de n. Por ejemplo,\n--    divisores 12  ==  [1,2,3,4,6]\ndivisores :: Integer -> [Integer]\ndivisores n = [x | x <- [1..n `div` 2], n `mod` x == 0]\n\n-- 2\u00aa soluci\u00f3n\n-- ===========\n\nsumasDeDosAbundantes2 :: [Integer]\nsumasDeDosAbundantes2 = filter esSumaDeDosAbundantes2 [1..]\n\nesSumaDeDosAbundantes2 :: Integer -> Bool\nesSumaDeDosAbundantes2 n = (not . null) [x | x <- xs, n-x `elem` xs]\n  where xs = takeWhile (<n) abundantes2\n\nabundantes2 :: [Integer]\nabundantes2 = filter abundante2 [2..]\n\nabundante2 :: Integer -> Bool\nabundante2 n = sumaDivisores n > n\n\nsumaDivisores :: Integer -> Integer\nsumaDivisores x =\n  product [(p^(e+1)-1) `div` (p-1) | (p,e) <- factorizacion x] - x\n\n-- (factorizacion x) es la lista de las bases y exponentes de la\n-- descomposici\u00f3n prima de x. Por ejemplo,\n--    factorizacion 600  ==  [(2,3),(3,1),(5,2)]\nfactorizacion :: Integer -> [(Integer,Integer)]\nfactorizacion = map primeroYlongitud . group . primeFactors\n\n-- (primeroYlongitud xs) es el par formado por el primer elemento de xs\n-- y la longitud de xs. Por ejemplo,\n--    primeroYlongitud [3,2,5,7] == (3,4)\nprimeroYlongitud :: [a] -> (a,Integer)\nprimeroYlongitud (x:xs) =\n  (x, 1 + genericLength xs)\n\n-- Comprobaci\u00f3n de equivalencia\n-- ============================\n\n-- La propiedad es\nprop_sumasDeDosAbundantes :: Positive Int -> Bool\nprop_sumasDeDosAbundantes (Positive n) =\n  sumasDeDosAbundantes1 !! n == sumasDeDosAbundantes2 !! n\n\n-- La comprobaci\u00f3n es\n--    \u03bb> quickCheck prop_sumasDeDosAbundantes\n--    +++ OK, passed 100 tests.\n\n-- Comparaci\u00f3n de eficiencia\n-- =========================\n\n-- La comparaci\u00f3n es\n--    \u03bb> sumasDeDosAbundantes1 !! (2*10^3)\n--    2887\n--    (2.54 secs, 516,685,168 bytes)\n--    \u03bb> sumasDeDosAbundantes2 !! (2*10^3)\n--    2887\n--    (1.43 secs, 141,606,136 bytes)\n<\/pre>\n<p>El c\u00f3digo se encuentra en <a href=\"https:\/\/github.com\/jaalonso\/Exercitium\/blob\/main\/src\/Sumas_de_dos_abundantes.hs\">GitHub<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un n\u00famero n es abundante si la suma de los divisores propios de n es mayor que n. El primer n\u00famero abundante es el 12 (cuyos divisores propios son 1, 2, 3, 4 y 6 cuya suma es 16). Por tanto, el menor n\u00famero que es la suma de dos n\u00fameros abundantes es el 24&#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":[8,498,501,30,26,38,258,13,10,89,181,141,11,247,157,40,34,521],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/7024"}],"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=7024"}],"version-history":[{"count":1,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/7024\/revisions"}],"predecessor-version":[{"id":7025,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/7024\/revisions\/7025"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=7024"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=7024"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=7024"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}