{"id":1209,"date":"2015-03-17T06:00:06","date_gmt":"2015-03-17T04:00:06","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=1209"},"modified":"2016-05-01T20:14:59","modified_gmt":"2016-05-01T18:14:59","slug":"sucesion-de-numeros-parientes","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/sucesion-de-numeros-parientes\/","title":{"rendered":"Sucesi\u00f3n de n\u00fameros parientes"},"content":{"rendered":"<p>Se dice que dos n\u00fameros naturales son parientes sitienen exactamente un factor primo en com\u00fan, independientemente de su multiplicidad. Por ejemplo,<\/p>\n<ul>\n<li>Los n\u00fameros 12 (2\u00b2\u00b73) y 40 (2\u00b3\u00b75) son parientes, pues tienen al 2  como \u00fanico factor primo en com\u00fan.<\/li>\n<li>Los n\u00fameros 49 (7\u00b2) y 63 (3\u00b2\u00b77) son parientes, pues tienen al 7 como \u00fanico factor primo en com\u00fan.<\/li>\n<li>Los n\u00fameros 12 (2\u00b2\u00b73) y 30 (2\u00b73\u00b75) no son parientes, pues tienen dos factores primos en com\u00fan.<\/li>\n<li>Los n\u00fameros 49 (7\u00b2) y 25 (5\u00b2) no son parientes, pues no tienen factores primos en com\u00fan.<\/li>\n<\/ul>\n<p>Se dice que una lista de n\u00fameros naturales es una secuencia de parientes si cada par de n\u00fameros consecutivos son parientes. Por ejemplo,<\/p>\n<ul>\n<li>La lista [12,40,35,28] es una secuencia de parientes.<\/li>\n<li>La lista [12,30,21,49] no es una secuencia de parientes.<\/li>\n<\/ul>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   secuenciaParientes :: [Integer] -> Bool\n<\/pre>\n<p>tal que (secuenciaParientes xs) se verifica si xs es una secuencia de parientes. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   secuenciaParientes [12,40,35,28]           ==  True\n   secuenciaParientes [12,30,21,49]           ==  False\n   secuenciaParientes [2^n | n <- [1..2000]]  ==  True\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.List (intersect, nub)\nimport Data.Numbers.Primes (primes, primeFactors)\n\n-- (parientes x y) se verifica si x e y son parientes. Por ejemplo,\n--    parientes 12 40  ==  True\n--    parientes 49 63  ==  True\n--    parientes 12 30  ==  False\n--    parientes 49 25  ==  False\n\n-- 1\u00aa definici\u00f3n (con gcd)\nparientes1 :: Integer -> Integer -> Bool\nparientes1 x y =\n    length [p | p <- takeWhile (<= d) primes, d `mod` p == 0] == 1 \n    where d = gcd x y\n\n-- 2\u00aa definici\u00f3n (con primeFactors)\nparientes2 :: Integer -> Integer -> Bool\nparientes2 0 0 = False\nparientes2 x y = \n    length (nub (primeFactors x `intersect` primeFactors y)) == 1\n\n-- Comparaci\u00f3n de eficiencia\n--    ghci> parientes1 (2^25) (2^25)\n--    True\n--    (34.34 secs, 15974866184 bytes)\n--    ghci> parientes2 (2^25) (2^25)\n--    True\n--    (0.01 secs, 3093024 bytes)\n\n-- Usaremos la 2\u00aa definici\u00f3n\nparientes :: Integer -> Integer -> Bool\nparientes = parientes2\n\n-- Definiciones de secuenciaParientes \n-- ==================================\n\n-- 1\u00aa definici\u00f3n (por recursi\u00f3n)\nsecuenciaParientes :: [Integer] -> Bool\nsecuenciaParientes []         = True\nsecuenciaParientes [x]        = True\nsecuenciaParientes (x1:x2:xs) =\n    parientes x1 x2 && secuenciaParientes (x2:xs)\n\n-- 2\u00aa definici\u00f3n (por recursi\u00f3n con 2 ecuaciones)\nsecuenciaParientes2 :: [Integer] -> Bool\nsecuenciaParientes2 (x1:x2:xs) =\n    parientes x1 x2 && secuenciaParientes2 (x2:xs)\nsecuenciaParientes2 _         = True\n\n-- 3\u00aa definici\u00f3n (sin recursi\u00f3n):\nsecuenciaParientes3 :: [Integer] -> Bool\nsecuenciaParientes3 xs = all (\\(x,y) -> parientes x y) (zip xs (tail xs)) \n\n-- 4\u00aa definici\u00f3n\nsecuenciaParientes4 :: [Integer] -> Bool\nsecuenciaParientes4 xs = all (uncurry parientes) (zip xs (tail xs)) \n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Se dice que dos n\u00fameros naturales son parientes sitienen exactamente un factor primo en com\u00fan, independientemente de su multiplicidad. Por ejemplo, Los n\u00fameros 12 (2\u00b2\u00b73) y 40 (2\u00b3\u00b75) son parientes, pues tienen al 2 como \u00fanico factor primo en com\u00fan. Los n\u00fameros 49 (7\u00b2) y 63 (3\u00b2\u00b77) son parientes, pues tienen al 7 como \u00fanico&#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":[41,8,155,270,28,89,24,11,247,173,6,45,34,271,9],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/1209"}],"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=1209"}],"version-history":[{"count":3,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/1209\/revisions"}],"predecessor-version":[{"id":1249,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/1209\/revisions\/1249"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=1209"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=1209"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=1209"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}