{"id":3635,"date":"2018-01-17T06:00:28","date_gmt":"2018-01-17T04:00:28","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=3635"},"modified":"2018-02-19T08:13:11","modified_gmt":"2018-02-19T06:13:11","slug":"numeros-como-diferencias-de-potencias","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/numeros-como-diferencias-de-potencias\/","title":{"rendered":"N\u00fameros como diferencias de potencias"},"content":{"rendered":"<p>El n\u00famero 45 se puede escribir de tres formas como diferencia de los cuadrados de dos n\u00fameros naturales:<\/p>\n<pre lang=\"text\">\n   45 =  7^2 -  2^2 \n      =  9^2 -  6^2\n      = 23^2 - 22^2\n<\/pre>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   diferencias :: Integer -> Integer -> [(Integer,Integer)]\n<\/pre>\n<p>tal que (diferencias x n) es la lista de pares tales que la diferencia de sus potencias n-\u00e9sima es x. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   diferencias 45 2    ==  [(7,2),(9,6),(23,22)]\n   diferencias 50 2    ==  []\n   diferencias 19 3    ==  [(3,2)]\n   diferencias 8 3     ==  [(2,0)]\n   diferencias 15 4    ==  [(2,1)]\n   diferencias 4035 2  ==  [(142,127),(406,401),(674,671),(2018,2017)]\n   head (diferencias 1161480105172255454401 5)  ==  (123456,123455)\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\n-- 1\u00aa definici\u00f3n\ndiferencias :: Integer -> Integer -> [(Integer,Integer)]\ndiferencias x n = [(a,b) | b <- [0..x]\n                         , a <- [b..x]\n                         , x == a^n - b^n]\n\n-- 2\u00aa definici\u00f3n\ndiferencias2 :: Integer -> Integer -> [(Integer,Integer)]\ndiferencias2 x n =\n  [(a,b) | a <- [1..x]\n         , a^n >= x\n         , let b = round ((fromIntegral (a^n - x)) ** (1\/fromIntegral n))\n         , x == a^n - b^n]\n\n-- 3\u00aa definici\u00f3n\ndiferencias3 :: Integer -> Integer -> [(Integer,Integer)]\ndiferencias3 x n =\n  [(a,b) | a <- [0..x]\n         , a^n >= x\n         , b <- raizEntera n (a^n - x)]\n\nraizEntera :: Integer -> Integer -> [Integer]\nraizEntera n x \n  | y^n == x  = [y]\n  | otherwise = []\n  where y = head [k | k <- [0..], k^n >= x] \n\n-- 4\u00aa definici\u00f3n\ndiferencias4 :: Integer -> Integer -> [(Integer,Integer)]\ndiferencias4 x n =\n  [(a,b) | a <- [0..x]\n         , a^n >= x\n         , b <- raizEntera n (a^n - x)]\n  where potencias = [(k,k^n) | k <- [0..]]\n        raizEntera n x \n          | yn == x   = [y]\n          | otherwise = []\n          where (y,yn) = head [(k,kn) | (k,kn) <- potencias, kn >= x]\n\n-- Comparaci\u00f3n de eficiencia\n--    \u03bb> head (diferencias 7351 3)\n--    (50,49)\n--    (2.16 secs, 533,868,368 bytes)\n--    \u03bb> head (diferencias2 7351 3)\n--    (50,49)\n--    (0.01 secs, 270,040 bytes)\n--    \u03bb> head (diferencias3 7351 3)\n--    (50,49)\n--    (0.01 secs, 1,021,720 bytes)\n--    \u03bb> head (diferencias4 7351 3)\n--    (50,49)\n--    (0.01 secs, 316,536 bytes)\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>El n\u00famero 45 se puede escribir de tres formas como diferencia de los cuadrados de dos n\u00fameros naturales: 45 = 7^2 &#8211; 2^2 = 9^2 &#8211; 6^2 = 23^2 &#8211; 22^2 Definir la funci\u00f3n diferencias :: Integer -> Integer -> [(Integer,Integer)] tal que (diferencias x n) es la lista de pares tales que la diferencia&#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,183,71,184],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3635"}],"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=3635"}],"version-history":[{"count":3,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3635\/revisions"}],"predecessor-version":[{"id":3776,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3635\/revisions\/3776"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=3635"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=3635"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=3635"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}