{"id":7758,"date":"2022-07-09T17:08:39","date_gmt":"2022-07-09T15:08:39","guid":{"rendered":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/?p=7758"},"modified":"2022-07-09T17:08:39","modified_gmt":"2022-07-09T15:08:39","slug":"pfh-la-semana-en-exercitium-9-de-julio-de-2022","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/pfh-la-semana-en-exercitium-9-de-julio-de-2022\/","title":{"rendered":"PFH: La semana en Exercitium (9 de julio de 2022)"},"content":{"rendered":"<p>Esta semana he publicado en <a href=\"http:\/\/bit.ly\/2sqPtGs\">Exercitium<\/a> las soluciones de los siguientes problemas:<\/p>\n<ul>\n<li><a href=\"#ej1\">1. Ceros finales del factorial<\/a><\/li>\n<li><a href=\"#ej2\">2. Uni\u00f3n e intersecci\u00f3n general de conjuntos<\/a><\/li>\n<li><a href=\"#ej3\">3. Intersecciones parciales<\/a><\/li>\n<li><a href=\"#ej4\">4. Mayor semiprimo menor que n<\/a><\/li>\n<li><a href=\"#ej5\">5. Particiones en k subconjuntos<\/a><\/li>\n<\/ul>\n<p>A continuaci\u00f3n se muestran las soluciones.<br \/>\n<!--more--><br \/>\n<a name=\"ej1\"><\/a><\/p>\n<h3>1. Ceros finales del factorial<\/h3>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   cerosDelFactorial :: Integer -> Integer\n<\/pre>\n<p>tal que <code>(cerosDelFactorial n)<\/code> es el n\u00famero de ceros en que termina el factorial de <code>n<\/code>. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   cerosDelFactorial 24                         == 4\n   cerosDelFactorial 25                         == 6\n   length (show (cerosDelFactorial (10^70000))) == 70000\n<\/pre>\n<p><!--more--><\/p>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.List (genericLength)\nimport Test.QuickCheck (Positive (Positive), quickCheck)\n\n-- 1\u00aa soluci\u00f3n\n-- ===========\n\ncerosDelFactorial1 :: Integer -> Integer\ncerosDelFactorial1 n = ceros (factorial n)\n\n-- (factorial n) es el factorial n. Por ejemplo,\n--    factorial 3  ==  6\nfactorial :: Integer -> Integer\nfactorial n = product [1..n]\n\n-- (ceros n) es el n\u00famero de ceros en los que termina el n\u00famero n. Por\n-- ejemplo, \n--    ceros 320000  ==  4\nceros :: Integer -> Integer\nceros n | rem n 10 \/= 0 = 0\n        | otherwise     = 1 + ceros (div n 10)\n\n-- 2\u00aa soluci\u00f3n\n-- ===========\n\ncerosDelFactorial2 :: Integer -> Integer\ncerosDelFactorial2 = ceros2 . factorial \n\nceros2 :: Integer -> Integer\nceros2 n = genericLength (takeWhile (=='0') (reverse (show n)))\n\n-- 3\u00aa soluci\u00f3n\n-- =============\n\ncerosDelFactorial3 :: Integer -> Integer\ncerosDelFactorial3 n\n  | n < 5     = 0\n  | otherwise = m + cerosDelFactorial3 m\n  where m = n `div` 5\n\n-- Comprobaci\u00f3n de equivalencia\n-- ============================\n\n-- La propiedad es\nprop_cerosDelFactorial :: Positive Integer -> Bool\nprop_cerosDelFactorial (Positive n) =\n  all (== cerosDelFactorial1 n)\n      [cerosDelFactorial2 n,\n       cerosDelFactorial3 n]\n\n-- La comprobaci\u00f3n es\n--    \u03bb> quickCheck prop_cerosDelFactorial\n--    +++ OK, passed 100 tests.\n\n-- Comparaci\u00f3n de eficiencia\n-- =========================\n\n-- La comparaci\u00f3n es\n--    \u03bb> cerosDelFactorial1 (4*10^4)\n--    9998\n--    (1.93 secs, 2,296,317,904 bytes)\n--    \u03bb> cerosDelFactorial2 (4*10^4)\n--    9998\n--    (1.57 secs, 1,636,242,040 bytes)\n--    \u03bb> cerosDelFactorial3 (4*10^4)\n--    9998\n--    (0.02 secs, 527,584 bytes)\n<\/pre>\n<p>El c\u00f3digo se encuentra en <a href=\"https:\/\/github.com\/jaalonso\/Exercitium\/blob\/main\/src\/Ceros_finales_del_factorial.hs\">GitHub<\/a>.<\/p>\n<p><a name=\"ej2\"><\/a><\/p>\n<h3>2. Uni\u00f3n e intersecci\u00f3n general de conjuntos<\/h3>\n<p>Definir las funciones<\/p>\n<pre lang=\"text\">\n   unionGeneral        :: Eq a => [[a]] -> [a]\n   interseccionGeneral :: Eq a => [[a]] -> [a]\n<\/pre>\n<p>tales que<\/p>\n<ul>\n<li>(unionGeneral xs) es la uni\u00f3n de los conjuntos de la lista de conjuntos xs (es decir, el conjunto de los elementos que pertenecen a alguno de los elementos de xs). Por ejemplo,<\/li>\n<\/ul>\n<pre lang=\"text\">\n     unionGeneral []                    ==  []\n     unionGeneral [[1]]                 ==  [1]\n     unionGeneral [[1],[1,2],[2,3]]     ==  [1,2,3]\n     unionGeneral ([[x] | x <- [1..9]]) ==  [1,2,3,4,5,6,7,8,9]\n<\/pre>\n<ul>\n<li>(interseccionGeneral xs) es la intersecci\u00f3n de los conjuntos de la lista de conjuntos xs (es decir, el conjunto de los elementos que pertenecen a todos los elementos de xs). Por ejemplo,<\/li>\n<\/ul>\n<pre lang=\"text\">\n     interseccionGeneral [[1]]                      ==  [1]\n     interseccionGeneral [[2],[1,2],[2,3]]          ==  [2]\n     interseccionGeneral [[2,7,5],[1,5,2],[5,2,3]]  ==  [2,5]\n     interseccionGeneral ([[x] | x <- [1..9]])      ==  []\n     interseccionGeneral (replicate (10^6) [1..5])  ==  [1,2,3,4,5]\n<\/pre>\n<p><!--more--><\/p>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.List (foldl', foldl1', intersect, nub, union)\nimport Test.QuickCheck (NonEmptyList (NonEmpty), quickCheck)\n\n-- 1\u00aa definici\u00f3n de unionGeneral\n-- =============================\n\nunionGeneral1 :: Eq a => [[a]] -> [a]\nunionGeneral1 []     = []\nunionGeneral1 (x:xs) = x `union` unionGeneral1 xs \n\n-- 2\u00aa definici\u00f3n de unionGeneral\n-- =============================\n\nunionGeneral2 :: Eq a => [[a]] -> [a]\nunionGeneral2 = foldr union []\n\n-- 3\u00aa definici\u00f3n de unionGeneral\n-- =============================\n\nunionGeneral3 :: Eq a => [[a]] -> [a]\nunionGeneral3 = foldl' union []\n\n-- Comprobaci\u00f3n de equivalencia de unionGeneral\n-- ============================================\n\n-- La propiedad es\nprop_unionGeneral :: [[Int]] -> Bool\nprop_unionGeneral xss =\n  all (== unionGeneral1 xss')\n      [unionGeneral2 xss',\n       unionGeneral3 xss']\n  where xss' = nub (map nub xss)\n  \n-- La comprobaci\u00f3n es\n--    \u03bb> quickCheck prop_unionGeneral\n--    +++ OK, passed 100 tests.\n--    (0.85 secs, 1,017,807,600 bytes)\n\n-- Comparaci\u00f3n de eficiencia de unionGeneral\n-- =========================================\n\n-- La comparaci\u00f3n es\n--    \u03bb> length (unionGeneral1 ([[x] | x <- [1..10^3]]))\n--    1000\n--    (1.56 secs, 107,478,456 bytes)\n--    \u03bb> length (unionGeneral2 ([[x] | x <- [1..10^3]]))\n--    1000\n--    (1.50 secs, 107,406,560 bytes)\n--    \u03bb> length (unionGeneral3 ([[x] | x <- [1..10^3]]))\n--    1000\n--    (0.07 secs, 92,874,024 bytes)\n\n-- 1\u00aa definici\u00f3n de interseccionGeneral\n-- ====================================\n\ninterseccionGeneral1 :: Eq a => [[a]] -> [a]\ninterseccionGeneral1 [x]    = x\ninterseccionGeneral1 (x:xs) = x `intersect` interseccionGeneral1 xs \n\n-- 2\u00aa definici\u00f3n de interseccionGeneral\n-- ====================================\n\ninterseccionGeneral2 :: Eq a => [[a]] -> [a]\ninterseccionGeneral2 = foldr1 intersect\n\n-- 3\u00aa definici\u00f3n de interseccionGeneral\n-- ====================================\n\ninterseccionGeneral3 :: Eq a => [[a]] -> [a]\ninterseccionGeneral3 = foldl1' intersect\n\n-- Comprobaci\u00f3n de equivalencia\n-- ============================\n\n-- La propiedad es\nprop_interseccionGeneral :: NonEmptyList [Int] -> Bool\nprop_interseccionGeneral (NonEmpty xss) =\n  all (== interseccionGeneral1 xss')\n      [interseccionGeneral2 xss',\n       interseccionGeneral3 xss']\n  where xss' = nub (map nub xss)\n\n-- La comprobaci\u00f3n es\n--    \u03bb> quickCheck prop_interseccionGeneral\n--    +++ OK, passed 100 tests.\n\n-- Comparaci\u00f3n de eficiencia\n-- =========================\n\n-- La comparaci\u00f3n es\n--    \u03bb> interseccionGeneral1 (replicate (10^6) [1..5])\n--    [1,2,3,4,5]\n--    (2.02 secs, 1,173,618,400 bytes)\n--    \u03bb> interseccionGeneral2 (replicate (10^6) [1..5])\n--    [1,2,3,4,5]\n--    (1.83 secs, 1,092,120,224 bytes)\n--    \u03bb> interseccionGeneral3 (replicate (10^6) [1..5])\n--    [1,2,3,4,5]\n--    (1.33 secs, 985,896,136 bytes)\n<\/pre>\n<p>El c\u00f3digo se encuentra en <a href=\"https:\/\/github.com\/jaalonso\/Exercitium\/blob\/main\/src\/Union_e_interseccion_general.hs\">GitHub<\/a>.<\/p>\n<p><a name=\"ej3\"><\/a><\/p>\n<h3>3. Intersecciones parciales<\/h3>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   interseccionParcial :: Ord a => Int -> [[a]] -> [a]\n<\/pre>\n<p>tal que <code>(interseccionParcial n xss)<\/code> es la lista de los elementos que pertenecen al menos a <code>n<\/code> conjuntos de <code>xss<\/code>. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   interseccionParcial 1 [[3,4],[4,5,9],[5,4,7]]  == [3,4,5,9,7]\n   interseccionParcial 2 [[3,4],[4,5,9],[5,4,7]]  == [4,5]\n   interseccionParcial 3 [[3,4],[4,5,9],[5,4,7]]  == [4]\n   interseccionParcial 4 [[3,4],[4,5,9],[5,4,7]]  == []\n<\/pre>\n<p><!--more--><\/p>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.List (foldl', nub, union, sort)\nimport Test.QuickCheck\n\n-- 1\u00aa soluci\u00f3n\n-- ===========\n\ninterseccionParcial1 :: Ord a => Int -> [[a]] -> [a]\ninterseccionParcial1 n xss = \n  [x | x <- sort (elementos xss)\n     , pertenecenAlMenos n xss x]\n\nelementos :: Ord a => [[a]] -> [a]\nelementos []       = []\nelementos (xs:xss) = xs `union` elementos xss\n\npertenecenAlMenos :: Ord a => Int -> [[a]] -> a -> Bool\npertenecenAlMenos n xss x =\n  length [xs | xs <- xss, x `elem` xs] >= n\n  \n-- 2\u00aa soluci\u00f3n\n-- ===========\n\ninterseccionParcial2 :: Ord a => Int -> [[a]] -> [a]\ninterseccionParcial2 n xss = \n  [x | x <- sort (elementos2 xss)\n     , pertenecenAlMenos2 n xss x]\n\nelementos2 :: Ord a => [[a]] -> [a]\nelementos2 = foldl' union []\n  \npertenecenAlMenos2 :: Ord a => Int -> [[a]] -> a -> Bool\npertenecenAlMenos2 n xss x =\n  length (filter (x `elem`) xss) >= n\n  \n-- 3\u00aa soluci\u00f3n\n-- ===========\n\ninterseccionParcial3 :: Ord a => Int -> [[a]] -> [a]\ninterseccionParcial3 n xss = \n  [x | x <- sort (nub (concat xss))\n     , length [xs | xs <- xss, x `elem` xs] >= n]\n\n-- Comprobaci\u00f3n de equivalencia\n-- ============================\n\n-- La propiedad es\nprop_interseccionParcial :: Positive Int -> [[Int]] -> Bool\nprop_interseccionParcial (Positive n) xss =\n  all (== interseccionParcial1 n yss)\n      [interseccionParcial2 n yss,\n       interseccionParcial3 n yss]\n  where yss = map nub xss\n\n-- La comprobaci\u00f3n es\n--    \u03bb> quickCheck prop_interseccionParcial\n--    +++ OK, passed 100 tests.\n<\/pre>\n<p>El c\u00f3digo se encuentra en <a href=\"https:\/\/github.com\/jaalonso\/Exercitium\/blob\/main\/src\/Intersecciones_parciales.hs\">GitHub<\/a>.<\/p>\n<p><a name=\"ej4\"><\/a><\/p>\n<h3>4. Mayor semiprimo menor que n<\/h3>\n<p>Un <a href=\"http:\/\/bit.ly\/1NK8bJ0\">n\u00famero semiprimo<\/a> es un n\u00famero natural  es producto de dos n\u00fameros primos no necesariamente distintos. Por ejemplo, 26 es semiprimo (porque 26 = 2\u00b713) y 49 tambi\u00e9n lo es (porque 49 = 7\u00b77).<\/p>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   mayorSemiprimoMenor :: Integer -> Integer\n<\/pre>\n<p>tal que <code>(mayorSemiprimoMenor n)<\/code> es el mayor semiprimo menor que <code>n<\/code> (suponiendo que <code>n<\/code> > 4). Por ejemplo,<\/p>\n<pre lang=\"text\">\n   mayorSemiprimoMenor 27      ==  26\n   mayorSemiprimoMenor 50      ==  49\n   mayorSemiprimoMenor 49      ==  46\n   mayorSemiprimoMenor (10^15) == 999999999999998\n<\/pre>\n<p><!--more--><\/p>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.Numbers.Primes (primeFactors, isPrime, primes)\nimport Test.QuickCheck\n\n-- 1\u00aa soluci\u00f3n\n-- ===========\n\nmayorSemiprimoMenor1 :: Integer -> Integer\nmayorSemiprimoMenor1 n =\n  head [x | x <- [n-1,n-2..2], semiPrimo x]\n\nsemiPrimo :: Integer -> Bool\nsemiPrimo n =\n  not (null [x | x <- [n,n-1..2], \n                 primo x,\n                 n `mod` x == 0,\n                 primo (n `div` x)])\n\nprimo :: Integer -> Bool\nprimo n = [x | x <- [1..n], n `mod` x == 0] == [1,n] \n\n-- 2\u00aa soluci\u00f3n\n-- ===========\n\nmayorSemiprimoMenor2 :: Integer -> Integer\nmayorSemiprimoMenor2 n =\n  head [x | x <- [n-1,n-2..2], semiPrimo2 x]\n\nsemiPrimo2 :: Integer -> Bool\nsemiPrimo2 n =\n  not (null [x | x <- [n-1,n-2..2], \n                 isPrime x,\n                 n `mod` x == 0,\n                 isPrime (n `div` x)])\n\n-- 3\u00aa soluci\u00f3n\n-- ===========\n\nmayorSemiprimoMenor3 :: Integer -> Integer\nmayorSemiprimoMenor3 n =\n  head [x | x <- [n-1,n-2..2], semiPrimo3 x]\n\nsemiPrimo3 :: Integer -> Bool\nsemiPrimo3 n =\n  not (null [x | x <- reverse (takeWhile (<n) primes),\n                 n `mod` x == 0,\n                 isPrime (n `div` x)])\n\n-- 4\u00aa soluci\u00f3n\n-- ===========\n\nmayorSemiprimoMenor4 :: Integer -> Integer\nmayorSemiprimoMenor4 n =\n  head [ p | p <- [n-1,n-2..2]\n           , (length . primeFactors) p == 2]\n\n-- 5\u00aa soluci\u00f3n\n-- ===========\n\nmayorSemiprimoMenor5 :: Integer -> Integer\nmayorSemiprimoMenor5 n\n  | semiPrimo5 (n-1) = n-1\n  | otherwise        = mayorSemiprimoMenor5 (n-1)\n\nsemiPrimo5 :: Integer -> Bool\nsemiPrimo5 x = length (primeFactors x) == 2\n\n-- Comprobaci\u00f3n de equivalencia\n-- ============================\n\n-- La propiedad es\nprop_mayorSemiprimoMenor :: Integer -> Property\nprop_mayorSemiprimoMenor n =\n  n > 4 ==>\n  all (== mayorSemiprimoMenor1 n)\n      [mayorSemiprimoMenor2 n,\n       mayorSemiprimoMenor3 n,\n       mayorSemiprimoMenor4 n,\n       mayorSemiprimoMenor5 n]\n\n-- La comprobaci\u00f3n es\n--    \u03bb> quickCheck prop_mayorSemiprimoMenor\n--    +++ OK, passed 100 tests; 353 discarded.\n\n-- Comparaci\u00f3n de eficiencia\n-- =========================\n\n-- La comparaci\u00f3n es\n--    \u03bb> mayorSemiprimoMenor1 5000\n--    4997\n--    (1.92 secs, 945,507,880 bytes)\n--    \u03bb> mayorSemiprimoMenor2 5000\n--    4997\n--    (0.05 secs, 123,031,264 bytes)\n--    \u03bb> mayorSemiprimoMenor3 5000\n--    4997\n--    (0.01 secs, 5,865,120 bytes)\n--    \u03bb> mayorSemiprimoMenor4 5000\n--    4997\n--    (0.00 secs, 593,528 bytes)\n--    \u03bb> mayorSemiprimoMenor5 5000\n--    4997\n--    (0.00 secs, 593,200 bytes)\n--\n--    \u03bb> mayorSemiprimoMenor3 (3*10^6)\n--    2999995\n--    (2.34 secs, 6,713,620,000 bytes)\n--    \u03bb> mayorSemiprimoMenor4 (2*10^6)\n--    1999997\n--    (0.01 secs, 728,936 bytes)\n--    \u03bb> mayorSemiprimoMenor5 (2*10^6)\n--    1999997\n--    (0.01 secs, 728,608 bytes)\n<\/pre>\n<p>El c\u00f3digo se encuentra en <a href=\"https:\/\/github.com\/jaalonso\/Exercitium\/blob\/main\/src\/Mayor_semiprimo_menor_que_n.hs\">GitHub<\/a>.<\/p>\n<p><a name=\"ej5\"><\/a><\/p>\n<h3>5. Particiones en k subconjuntos<\/h3>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   particiones :: [a] -> Int -> [[[a]]]\n<\/pre>\n<p>tal que <code>(particiones xs k)<\/code> es la lista de las particiones de <code>xs<\/code> en <code>k<\/code> subconjuntos disjuntos. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   \u03bb> particiones [2,3,6] 2\n   [[[2],[3,6]],[[2,3],[6]],[[3],[2,6]]]\n   \u03bb> particiones [2,3,6] 3\n   [[[2],[3],[6]]]\n   \u03bb> particiones [4,2,3,6] 3\n   [[[4],[2],[3,6]],[[4],[2,3],[6]],[[4],[3],[2,6]],\n    [[4,2],[3],[6]],[[2],[4,3],[6]],[[2],[3],[4,6]]]\n   \u03bb> particiones [4,2,3,6] 1\n   [[[4,2,3,6]]]\n   \u03bb> particiones [4,2,3,6] 4\n   [[[4],[2],[3],[6]]]\n<\/pre>\n<p><!--more--><\/p>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.List (nub, sort)\nimport Data.Array (Array, (!), array, listArray)\nimport Test.QuickCheck (Positive (Positive), quickCheckWith)\n\n-- 1\u00aa soluci\u00f3n\n-- ===========\n\nparticiones1 :: [a] -> Int -> [[[a]]]\nparticiones1 [] _     = []\nparticiones1 _  0     = []\nparticiones1 xs 1     = [[xs]]\nparticiones1 (x:xs) k = [[x]:ys | ys <- particiones1 xs (k-1)] ++ \n                        concat [inserta x ys | ys <- particiones1 xs k]\n\n-- (inserta x yss) es la lista obtenida insertando x en cada uno de los\n-- conjuntos de yss. Por ejemplo,\n--    inserta 4 [[3],[2,5]]  ==  [[[4,3],[2,5]],[[3],[4,2,5]]]\ninserta :: a -> [[a]] -> [[[a]]]\ninserta _ []       = []\ninserta x (ys:yss) = ((x:ys):yss) : [ys:zss | zss <- inserta x yss]\n\n-- 2\u00aa soluci\u00f3n\n-- ===========\n\nparticiones2 :: [a] -> Int -> [[[a]]]\nparticiones2 [] _     = []\nparticiones2 _  0     = []\nparticiones2 xs 1     = [[xs]]\nparticiones2 (x:xs) k = map ([x]:) (particiones2 xs (k-1)) ++ \n                        concatMap (inserta x) (particiones2 xs k)\n\n-- 3\u00aa soluci\u00f3n\n-- ===========\n\nparticiones3 :: [a] -> Int -> [[[a]]]\nparticiones3 xs k = matrizParticiones xs k ! (length xs, k)\n\nmatrizParticiones :: [a] -> Int -> Array (Int,Int) [[[a]]]\nmatrizParticiones xs k = q where\n  q = array ((0,0),(n,k)) [((i,j), f i j) | i <- [0..n], j <- [0..k]]\n  n = length xs\n  v = listArray (1,n) xs\n  f _ 0 = []\n  f 0 _ = []\n  f m 1 = [[take m xs]]\n  f i j | i == j = [[[x] | x <- take i xs]]\n        | otherwise = map ([v!i] :) (q!(i-1,j-1)) ++\n                      concatMap (inserta (v!i)) (q!(i-1,j))\n\n-- Comprobaci\u00f3n de equivalencia\n-- ============================\n\n-- La propiedad es\nprop_particiones :: [Int] -> Positive Int -> Bool\nprop_particiones xs (Positive k) =\n  all (iguales (particiones1 xs' k))\n      [particiones2 xs' k,\n       particiones3 xs' k]\n  where\n    xs' = nub xs\n    iguales xss yss = sort (map sort [map sort x | x <- xss]) ==\n                      sort (map sort [map sort y | y <- yss])\n\n-- La comprobaci\u00f3n es\n--    \u03bb> quickCheckWith (stdArgs {maxSize=10}) prop_particiones\n--    +++ OK, passed 100 tests.\n\n-- Comparaci\u00f3n de eficiencia\n-- =========================\n\n-- La comparaci\u00f3n es\n--    \u03bb> length (particiones1 [1..12] 6)\n--    1323652\n--    (1.33 secs, 1,152,945,584 bytes)\n--    \u03bb> length (particiones2 [1..12] 6)\n--    1323652\n--    (1.07 secs, 1,104,960,360 bytes)\n--    \u03bb> length (particiones3 [1..12] 6)\n--    1323652\n--    (1.68 secs, 1,047,004,368 bytes)\n<\/pre>\n<p>El c\u00f3digo se encuentra en <a href=\"https:\/\/github.com\/jaalonso\/Exercitium\/blob\/main\/src\/Particiones_en_k_subconjuntos.hs\">GitHub<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Esta semana he publicado en Exercitium las soluciones de los siguientes problemas: 1. Ceros finales del factorial 2. Uni\u00f3n e intersecci\u00f3n general de conjuntos 3. Intersecciones parciales 4. Mayor semiprimo menor que n 5. Particiones en k subconjuntos A continuaci\u00f3n se muestran las soluciones.<\/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":[337],"tags":[],"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\/7758"}],"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=7758"}],"version-history":[{"count":1,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/7758\/revisions"}],"predecessor-version":[{"id":7759,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/7758\/revisions\/7759"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/media?parent=7758"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/categories?post=7758"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/tags?post=7758"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}