Descomposiciones en sumas de primos
Definir la función
1 |
sumaDePrimos :: Int -> [[Int]] |
tal que (sumaDePrimos x) es la lista de las listas no crecientes de números primos que suman x. Por ejemplo,
1 2 3 |
sumaDePrimos 10 == [[7,3],[5,5],[5,3,2],[3,3,2,2],[2,2,2,2,2]] sumaDePrimos 0 == [] sumaDePrimos 1 == [] |
Soluciones
1 2 3 4 5 6 7 8 |
import Data.Numbers.Primes (primes) sumaDePrimos :: Integer -> [[Integer]] sumaDePrimos n = aux n (reverse (takeWhile (<=n) primes)) 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 |