Números automórficos
Un número n es automórfico si los últimos dígitos de su cuadrado son los dígitos de n. Por ejemplo, 5, 6, 76 y 890625 son números automórficos ya que 5² = 25, 6² = 36, 76² = 5776 y 890625² = 793212890625.
Definir la sucesión
1 |
automorficos :: [Integer] |
tal que sus elementos son los números automórficos. Por ejemplo,
1 2 3 4 |
λ> take 11 automorficos [1,5,6,25,76,376,625,9376,90625,109376,890625] λ> automorficos !! 30 56259918212890625 |
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import Data.List (isSuffixOf, nub, sort) automorficos :: [Integer] automorficos = filter esAutomorfico [1..] esAutomorfico :: Integer -> Bool esAutomorfico n = show n `isSuffixOf` show (n*n) -- 2ª definición -- ============= automorficos2 :: [Integer] automorficos2 = nub (1 : concat [sort [a,b] | k <- [1..], let a = 5^(2^k) `mod` 10^k, let b = 10^k - a + 1]) -- Comparación de eficiencia -- ========================= -- λ> automorficos !! 12 -- 7109376 -- (16.64 secs, 6,759,638,824 bytes) -- λ> automorficos2 !! 12 -- 7109376 -- (0.00 secs, 0 bytes) |
Referencias
- J.D. Cook, Curious numbers.
- Wikipedia, Automorphic number.
- E.W. Weisstein, Automorphic number en MathWorld.
- N.J.A. Sloane Sucesion A003226 en OEIS.
7 Comentarios