{"id":4740,"date":"2019-02-20T06:00:20","date_gmt":"2019-02-20T04:00:20","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=4740"},"modified":"2019-02-27T07:30:26","modified_gmt":"2019-02-27T05:30:26","slug":"mayor-exponente","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/mayor-exponente\/","title":{"rendered":"Mayor exponente"},"content":{"rendered":"<p>Definir las funciones<\/p>\n<pre lang=\"text\"> \n   mayorExponente        :: Integer -> Integer\n   graficaMayorExponente :: Integer -> IO ()\n<\/pre>\n<p>tales que<\/p>\n<ul>\n<li>(mayorExponente n) es el mayor n\u00famero b para el que existe un a tal que n = a^b. Se supone que n > 1. Por ejemplo,<\/li>\n<\/ul>\n<pre lang=\"text\">   \n     mayorExponente 9   ==  2\n     mayorExponente 8   ==  3\n     mayorExponente 7   ==  1\n     mayorExponente 18  ==  1\n     mayorExponente 36  ==  2\n     mayorExponente (10^(10^5))  ==  100000\n<\/pre>\n<ul>\n<li>(graficaMayorExponente n) dibuja la gr\u00e1fica de los mayores exponentes de los n\u00fameros entre 2 y n. Por ejemplo, (graficaMayorExponente 50) dibuja<br \/>\n<a href=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/02\/MayorExponente.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/02\/MayorExponente.png?resize=640%2C480\" alt=\"\" width=\"640\" height=\"480\" class=\"aligncenter size-full wp-image-4742\" srcset=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/02\/MayorExponente.png?w=640&amp;ssl=1 640w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/02\/MayorExponente.png?resize=300%2C225&amp;ssl=1 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" data-recalc-dims=\"1\" \/><\/a><\/li>\n<\/ul>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.List (genericLength, group)\nimport Data.Numbers.Primes (primeFactors)\nimport Test.QuickCheck\nimport Graphics.Gnuplot.Simple\n\n\n-- 1\u00aa soluci\u00f3n\n-- ===========\n\nmayorExponente :: Integer -> Integer\nmayorExponente x =\n  last [b | b <- [1..x]\n          , a <- [1..x]\n          , a^b == x]\n\n-- 2\u00aa soluci\u00f3n\n-- ===========\n\nmayorExponente2 :: Integer -> Integer\nmayorExponente2 x =\n  head [b | b <- [x,x-1..1]\n          , a <- [1..x]\n          , a^b == x]\n\n-- 3\u00aa soluci\u00f3n\n-- ===========\n\nmayorExponente3 :: Integer -> Integer\nmayorExponente3 x = aux x\n  where aux 1 = 1\n        aux b | any (\\a -> a^b == x) [1..x] = b\n              | otherwise                   = aux (b-1)\n\n-- 4\u00aa soluci\u00f3n\n-- ===========\n\nmayorExponente4 :: Integer -> Integer\nmayorExponente4 x =\n  mcd (exponentes x)\n\n-- (exponentes x) es la lista de los exponentes en la factorizacio\u0144 de\n-- x. por ejemplo.\n--    exponentes 720  ==  [4,2,1]\nexponentes :: Integer -> [Integer]\nexponentes x =\n  map genericLength (group (primeFactors x))\n\n-- (mcd xs) es el m\u00e1ximo com\u00fan divisor de xs. Por ejemplo,\n--    mcd [4,6,10]  ==  2\nmcd :: [Integer] -> Integer\nmcd = foldr1 gcd\n\n-- Comprobaci\u00f3n de equivalencia\n-- ============================\n\n-- La propiedad es\nprop_mayorExponente :: Integer -> Property\nprop_mayorExponente n =\n  n >= 0 ==>\n  mayorExponente  n == mayorExponente2 n &&\n  mayorExponente2 n == mayorExponente3 n\n\n-- La comprobaci\u00f3n es\n--    \u03bb> quickCheck prop_mayorExponente\n--    +++ OK, passed 100 tests.\n\n-- Comparaci\u00f3n de eficiencia\n-- =========================\n\n--    \u03bb> mayorExponente (10^3)\n--    3\n--    (3.96 secs, 4,671,928,464 bytes)\n--    \u03bb> mayorExponente2 (10^3)\n--    3\n--    (3.99 secs, 4,670,107,024 bytes)\n--    \u03bb> mayorExponente3 (10^3)\n--    3\n--    (3.90 secs, 4,686,383,952 bytes)\n--    \u03bb> mayorExponente4 (10^3)\n--    3\n--    (0.02 secs, 131,272 bytes)\n\n-- Definici\u00f3n de graficaMayorExponente\n-- ======================================\n\ngraficaMayorExponente :: Integer -> IO ()\ngraficaMayorExponente n = \n  plotList [ Key Nothing\n           , PNG (\"MayorExponente.png\")\n           ]\n           (map mayorExponente3 [2..n])\n<\/pre>\n<h4>Pensamiento<\/h4>\n<blockquote><p>\nMirando mi calavera<br \/>\nun nuevo Hamlet dir\u00e1:<br \/>\nHe aqu\u00ed un lindo f\u00f3sil de una<br \/>\ncareta de carnaval.<\/p>\n<p>Antonio Machado\n<\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Definir las funciones mayorExponente :: Integer -> Integer graficaMayorExponente :: Integer -> IO () tales que (mayorExponente n) es el mayor n\u00famero b para el que existe un a tal que n = a^b. Se supone que n > 1. Por ejemplo, mayorExponente 9 == 2 mayorExponente 8 == 3 mayorExponente 7 == 1 mayorExponente&#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,243,155,258,13,71,134,10,11,247],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/4740"}],"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=4740"}],"version-history":[{"count":4,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/4740\/revisions"}],"predecessor-version":[{"id":4779,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/4740\/revisions\/4779"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=4740"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=4740"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=4740"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}