{"id":2247,"date":"2012-10-23T15:15:21","date_gmt":"2012-10-23T15:15:21","guid":{"rendered":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/?p=2247"},"modified":"2013-03-08T05:44:48","modified_gmt":"2013-03-08T05:44:48","slug":"i1m2012-ejercicios-de-definiciones-por-comprension-2","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/i1m2012-ejercicios-de-definiciones-por-comprension-2\/","title":{"rendered":"I1M2012: Ejercicios de definiciones por comprensi\u00f3n (2)"},"content":{"rendered":"<p>En la clase de hoy del curso <a href=\"http:\/\/www.cs.us.es\/~jalonso\/cursos\/i1m-12\">Inform\u00e1tica (de 1\u00ba de Grado en Matem\u00e1ticas)<\/a> se han comentado las soluciones de los ejercicios 4 a 6 de la <a href=\"https:\/\/www.glc.us.es\/~jalonso\/ejerciciosI1M2012G2\/images\/a\/a9\/Rel_4.hs\">4\u00aa relaci\u00f3n<\/a> sobre definiciones por comprensi\u00f3n.<\/p>\n<p>Los ejercicios y sus soluciones se muestran a continuaci\u00f3n<br \/>\n<!--more--><\/p>\n<pre lang=\"haskell\">\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 4. Un entero positivo es perfecto si es igual a la suma de\r\n-- sus factores, excluyendo el propio n\u00famero. \r\n-- \r\n-- Definir por comprensi\u00f3n la funci\u00f3n \r\n--    perfectos :: Int -> [Int]\r\n-- tal que (perfectos n) es la lista de todos los n\u00fameros perfectos\r\n-- menores que n. Por ejemplo, \r\n--    perfectos 500  ==  [6,28,496]\r\n-- Indicaci\u00f3n: Usar la funci\u00f3n factores del tema 5.\r\n-- ---------------------------------------------------------------------\r\n\r\n-- La funci\u00f3n factores del tema es\r\nfactores :: Int -> [Int]\r\nfactores n = [x | x <- [1..n], n `mod` x == 0]\r\n\r\n-- La definici\u00f3n es\r\nperfectos :: Int -> [Int]\r\nperfectos n = [x | x <- [1..n], sum (init (factores x)) == x]\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 5. Un n\u00famero natural n se denomina abundante si es menor\r\n-- que la suma de sus divisores propios. Por ejemplo, 12 y 30 son\r\n-- abundantes pero 5 y 28 no lo son.\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 5.1. Definir la funci\u00f3n numeroAbundante tal que\r\n-- (numeroAbundante n) se verifica si n es un n\u00famero abundante. Por\r\n-- ejemplo, \r\n--    numeroAbundante 5  == False\r\n--    numeroAbundante 12 == True\r\n--    numeroAbundante 28 == False\r\n--    numeroAbundante 30 == True\r\n-- ---------------------------------------------------------------------\r\n\r\ndivisores:: Int -> [Int]\r\ndivisores n = [m | m <- [1..n-1], n `mod` m == 0]\r\n\r\nnumeroAbundante:: Int -> Bool \r\nnumeroAbundante n = n < sum (divisores n)\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 5.2. Definir la funci\u00f3n numerosAbundantesMenores tal que\r\n-- (numerosAbundantesMenores n) es la lista de n\u00fameros abundantes\r\n-- menores o iguales que n. Por ejemplo,\r\n--    numerosAbundantesMenores 50  ==  [12,18,20,24,30,36,40,42,48]\r\n-- ---------------------------------------------------------------------\r\n\r\nnumerosAbundantesMenores :: Int -> [Int]\r\nnumerosAbundantesMenores n = [x | x <- [1..n], numeroAbundante x]\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 5.3. Definir la funci\u00f3n todosPares tal que (todosPares n)\r\n-- se verifica si todos los n\u00fameros abundantes menores o iguales que n\r\n-- son pares. Por ejemplo,\r\n--    todosPares 10    ==  True\r\n--    todosPares 100   ==  True\r\n--    todosPares 1000  ==  False\r\n-- ---------------------------------------------------------------------\r\n\r\ntodosPares :: Int -> Bool\r\ntodosPares n = and [even x | x <- numerosAbundantesMenores n]\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 5.4. Definir la constante primerAbundanteImpar que calcule\r\n-- el primer n\u00famero natural abundante impar. Determinar el valor de\r\n-- dicho n\u00famero.\r\n-- ---------------------------------------------------------------------\r\n\r\nprimerAbundanteImpar:: Int\r\nprimerAbundanteImpar = head [x | x <- [1..], numeroAbundante x, odd x]\r\n\r\n-- Su c\u00e1lculo es\r\n--    ghci> primerAbundanteImpar\r\n--    945\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 6 (Problema 1 del proyecto Euler) Definir la funci\u00f3n\r\n--    euler1 :: Integer -> Integer\r\n-- (euler1 n) es la suma de todos los m\u00faltiplos de 3 \u00f3 5 menores que\r\n-- n. Por ejemplo,\r\n--    euler1 10  ==  23\r\n-- \r\n-- Calcular la suma de todos los m\u00faltiplos de 3 \u00f3 5 menores que 1000.\r\n-- ---------------------------------------------------------------------\r\n\r\neuler1 :: Integer -> Integer\r\neuler1 n = sum [x | x <- [1..n-1], multiplo x 3 || multiplo x 5]\r\n    where multiplo x y = mod x y == 0\r\n\r\n-- C\u00e1lculo:\r\n--    ghci> euler1 1000\r\n--    233168\r\n<\/pre>\n<p>Con motivo del \u00faltimo ejercicio se coment\u00f3 el <a href=\"http:\/\/projecteuler.net\/problems\">proyecto Euler<\/a>.<\/p>\n<p>Finalmente, se propuso el siguiente problema de la IMO (Olimp\u00edada Internacional de Matem\u00e1ticas) de 1966:<\/p>\n<blockquote><p>\nCalcular los \u00faltimos dos d\u00edgitos de la suma de las octavas potencias de 100 enteros consecutivos.<br \/>\n<\/blocquote><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En la clase de hoy del curso Inform\u00e1tica (de 1\u00ba de Grado en Matem\u00e1ticas) se han comentado las soluciones de los ejercicios 4 a 6 de la 4\u00aa relaci\u00f3n sobre definiciones por comprensi\u00f3n. Los ejercicios y sus soluciones se muestran a continuaci\u00f3n<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","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":[1],"tags":[298],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":false,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/2247"}],"collection":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/comments?post=2247"}],"version-history":[{"count":3,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/2247\/revisions"}],"predecessor-version":[{"id":2647,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/2247\/revisions\/2647"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/media?parent=2247"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/categories?post=2247"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/tags?post=2247"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}