Números para los que mcm de 1,2,...n-1 coincide con el de 1,2,...,n
Un número n es especial si mcm(1,2,...,n-1) = mcm(1,2,...,n). Por ejemplo, el 6 es especial ya que
mcm(1,2,3,4,5) = 60 = mcm(1,2,3,4,5,6)
Definir la sucesión
especiales :: [Integer]
cuyos términos son los números especiales. Por ejemplo,
take 10 especiales == [1,6,10,12,14,15,18,20,21,22] especiales !! 50 == 84 especiales !! 500 == 638 especiales !! 5000 == 5806 especiales !! 50000 == 55746
Soluciones
-- 1ª definición -- ============= especiales :: [Integer] especiales = filter especial [1..] especial :: Integer -> Bool especial n = mcm [1..n-1] == mcm [1..n] mcm :: [Integer] -> Integer mcm [] = 1 mcm (x:xs) = lcm x (mcm xs) -- 2ª definición -- ============= especiales2 :: [Integer] especiales2 = [n | ((n,x),(m,y)) <- zip mcms (tail mcms) , x == y] mcms :: [(Integer,Integer)] mcms = zip [1..] (scanl lcm 1 [1..]) -- Comparación -- λ> especiales !! 1000 -- 1227 -- (3.97 secs, 1153788720 bytes) -- λ> especiales2 !! 1000 -- 1227 -- (0.01 secs, 1033156 bytes)