{"id":3365,"date":"2017-11-06T06:00:13","date_gmt":"2017-11-06T04:00:13","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=3365"},"modified":"2017-11-14T17:24:11","modified_gmt":"2017-11-14T15:24:11","slug":"numeros-completos","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/numeros-completos\/","title":{"rendered":"N\u00fameros completos"},"content":{"rendered":"<p>Las descomposiciones de un n\u00famero n son las parejas de n\u00fameros (x,y) tales que x >= y y la suma de las cuatro operaciones b\u00e1sicas (suma, producto, resta (el mayor menos el menor) y cociente (el mayor entre el menor)) es el n\u00famero n. Por ejemplo, (8,2) es una descomposici\u00f3n de 36 ya que<\/p>\n<pre lang=\"text\">\n   (8 + 2) + (8 - 2) + (8 * 2) + (8 \/ 2) = 36\n<\/pre>\n<p>Un n\u00famero es completo si tiene alguna descomposici\u00f3n como las anteriores. Por ejemplo, el 36 es completo pero el 21 no lo es.<\/p>\n<p>Definir las siguientes funciones<\/p>\n<pre lang=\"text\">\n   descomposiciones :: Integer -> [(Integer,Integer)]\n   completos        :: [Integer]\n<\/pre>\n<p>tales que<\/p>\n<ul>\n<li>(descomposiciones n) es la lista de las descomposiones de n. Por ejemplo,<\/li>\n<\/ul>\n<pre lang=\"text\">\n     descomposiciones 12   ==  [(3,1)]\n     descomposiciones 16   ==  [(3,3),(4,1)]\n     descomposiciones 36   ==  [(5,5),(8,2),(9,1)]\n     descomposiciones 288  ==  [(22,11),(40,5),(54,3),(64,2),(72,1)]\n     descomposiciones 21   ==  []\n<\/pre>\n<ul>\n<li>completos es la lista de los n\u00fameros completos. Por ejemplo,<\/li>\n<\/ul>\n<pre lang=\"text\">\n     take 15 completos  ==  [4,8,9,12,16,18,20,24,25,27,28,32,36,40,44]\n     completos !! 100   ==  261\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\n-- 1\u00aa soluci\u00f3n de descomposiciones\ndescomposiciones1 :: Integer -> [(Integer,Integer)]\ndescomposiciones1 n =\n  [(x,y) | x <- [1..n]\n         , y <- [1..x]\n         , x `rem` y == 0\n         , (x + y) + (x - y) + (x * y) + (x `div` y) == n]\n\n-- 2\u00aa soluci\u00f3n de descomposiciones\ndescomposiciones2 :: Integer -> [(Integer,Integer)]\ndescomposiciones2 n =\n  [(n `div` ((y+1)^2) * y,y)\n  | y <- [1..(floor . sqrt . fromIntegral) n]\n  , n `mod` ((y+1)^2) == 0]\n\n-- Comparaci\u00f3n de eficiencia\n--    \u03bb> length (descomposiciones1 4000)\n--    5\n--    (3.16 secs, 1,618,693,272 bytes)\n--    \u03bb> length (descomposiciones2 4000)\n--    5\n--    (0.00 secs, 188,208 bytes)\n\n-- Usaremos la 2\u00aa definici\u00f3 de descomposiciones\ndescomposiciones :: Integer -> [(Integer,Integer)]\ndescomposiciones = descomposiciones2\n\n-- 1\u00aa definici\u00f3n de completos\ncompletos1 :: [Integer]\ncompletos1 = [n | n <- [1..]\n                , not (null (descomposiciones n))]\n\n-- 2\u00aa definici\u00f3n de completos\ncompletos2 :: [Integer]\ncompletos2 = filter (not . null . descomposiciones) [1..]\n\n-- Usaremos la 2\u00aa definici\u00f3n de completos\ncompletos :: [Integer]\ncompletos = completos2\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Las descomposiciones de un n\u00famero n son las parejas de n\u00fameros (x,y) tales que x >= y y la suma de las cuatro operaciones b\u00e1sicas (suma, producto, resta (el mayor menos el menor) y cociente (el mayor entre el menor)) es el n\u00famero n. Por ejemplo, (8,2) es una descomposici\u00f3n de 36 ya que (8&#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":[5],"tags":[8,30,38,282,183,89,181,141,11,236],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3365"}],"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=3365"}],"version-history":[{"count":10,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3365\/revisions"}],"predecessor-version":[{"id":3420,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3365\/revisions\/3420"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=3365"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=3365"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=3365"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}