Pares como sumas de pares
Todo número par se puede escribir como suma de números pares de varias formas. Por ejemplo,
1 2 3 4 5 |
8 = 8 = 6 + 2 = 4 + 4 = 4 + 2 + 2 = 2 + 2 + 2 + 2 |
Definir la función
1 |
descomposicionesDecrecientes:: Integer -> [[Integer]] |
tal que (descomposicionesDecrecientes n) es la lista con las descomposiciones de n como suma de pares, en forma decreciente. Por ejemplo,
1 2 3 4 5 6 |
ghci> descomposicionesDecrecientes 8 [[8],[6,2],[4,4],[4,2,2],[2,2,2,2]] ghci> descomposicionesDecrecientes 10 [[10],[8,2],[6,4],[6,2,2],[4,4,2],[4,2,2,2],[2,2,2,2,2]] ghci> length (descomposicionesDecrecientes 100) 204226 |
Soluciones
1 2 3 4 5 6 7 |
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 |
3 Comentarios