La sucesión ECG estás definida por a(1) = 1, a(2) = 2 y, para n >= 3, a(n) es el menor natural que aún no está en la sucesión tal que a(n) tiene algún divisor común con a(n-1).
Los primeros términos de la sucesión son 1, 2, 4, 6, 3, 9, 12, 8, 10, 5, 15, …
Al dibujar su gráfica, se parece a la de los electrocardiogramas (abreviadamente, ECG). Por ello, la sucesión se conoce como la sucesión ECG.
Definir las funciones
sucECG :: [Integer] graficaSucECG :: Int -> IO () |
tales que
- sucECG es la lista de los términos de la sucesión ECG. Por ejemplo,
λ> take 20 sucECG [1,2,4,6,3,9,12,8,10,5,15,18,14,7,21,24,16,20,22,11] λ> sucECG !! 6000 6237 |
- (graficaSucECG n) dibuja la gráfica de los n primeros términos de la sucesión ECG. Por ejemplo, (graficaSucECG 160) dibuja
Soluciones
import Data.List (delete) import Graphics.Gnuplot.Simple sucECG :: [Integer] sucECG = 1 : ecg 2 [2..] where ecg x zs = f zs where f (y:ys) | gcd x y > 1 = y : ecg y (delete y zs) | otherwise = f ys graficaSucECG :: Int -> IO () graficaSucECG n = plotList [ Key Nothing , PNG "La_sucesion_ECG.png" ] (take n sucECG) |