Pares como sumas de pares
Todo número par se puede escribir como suma de números pares de varias formas. Por ejemplo,
8 = 8 = 6 + 2 = 4 + 4 = 4 + 2 + 2 = 2 + 2 + 2 + 2
Definir la función
descomposicionesDecrecientes:: Integer -> [[Integer]]
tal que (descomposicionesDecrecientes n) es la lista con las descomposiciones de n como suma de pares, en forma decreciente. Por ejemplo,
λ> descomposicionesDecrecientes 8 [[8],[6,2],[4,4],[4,2,2],[2,2,2,2]] λ> descomposicionesDecrecientes 10 [[10],[8,2],[6,4],[6,2,2],[4,4,2],[4,2,2,2],[2,2,2,2,2]] λ> length (descomposicionesDecrecientes 100) 204226
Soluciones
descomposicionesDecrecientes:: Integer -> [[Integer]] descomposicionesDecrecientes 0 = [[0]] descomposicionesDecrecientes n = aux n [n,n-2..2] where aux _ [] = [] aux n (x:xs) | x > n = aux n xs | x == n = [n] : aux n xs | otherwise = map (x:) (aux (n-x) (x:xs)) ++ aux n xs