import Graphics.Gnuplot.Simple
-- 1ª solución
sucesionesConSuma :: Int -> [(Int,Int)]
sucesionesConSuma n =
[(x,y) | y <- [0..n], x <- [0..y], sum [x..y] == n]
-- 2ª solución
sucesionesConSuma2 :: Int -> [(Int,Int)]
sucesionesConSuma2 n =
[(x,y) | y <- [0..n], x <- [0..y], (x+y)*(y-x+1) == 2*n]
-- Comparación de eficiencia
-- λ> sucesionesConSuma 700
-- [(3,37),(16,40),(84,91),(97,103),(138,142),(700,700)]
-- (2.71 secs, 7,894,718,264 bytes)
-- λ> sucesionesConSuma2 700
-- [(3,37),(16,40),(84,91),(97,103),(138,142),(700,700)]
-- (0.22 secs, 118,104,176 bytes)
-- Gráfica
graficaSucesionesConSuma :: Int -> IO ()
graficaSucesionesConSuma n =
plotList [ Key Nothing
, PNG "Sucesiones_de_numeros_consecutivos_con_suma_dada.png"]
[length (sucesionesConSuma2 k) | k <- [0..n]] |
7 soluciones de “Sucesiones de números consecutivos con suma dada”