Raíces digitales de los números de Fermat.
Los números de Fermat son los número de la forma F(n) = 2^(2^n) + 1, donde n es un número natural.
Definir la función
1 |
raizDigitalFermat :: Integer -> Integer |
tal que (raizDigitalFermat n) es la raíz digital del n-ésimo número de Fermat. Por ejemplo,
1 2 |
raizDigitalFermat 3 == 5 raizDigitalFermat (10^2021) == 8 |
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
-- 1ª solución -- =========== raizDigitalFermat :: Integer -> Integer raizDigitalFermat = raizDigital . fermat -- (fermat k) es el k-ésimo número de Fermat. Por ejemplo, -- fermat 0 == 3 -- fermat 1 == 5 -- fermat 2 == 17 -- fermat 3 == 257 -- fermat 4 == 65537 -- fermat 5 == 4294967297 fermat :: Integer -> Integer fermat k = 1 + 2^(2^k) -- (raizDigital n) es la raíz digital de n. Por ejemplo, -- raizDigital 23451 == 6 raizDigital :: Integer -> Integer raizDigital n = 1 + (n-1) `mod` 9 -- 2ª solución -- =========== -- En el cálculo -- λ> map raizDigitalFermat [0..20] -- [3,5,8,5,8,5,8,5,8,5,8,5,8,5,8,5,8,5,8,5,8] -- se observa que se compone del 3 seguido por la repetición periódica -- de 5 y 8. raizDigitalFermat2 :: Integer -> Integer raizDigitalFermat2 0 = 3 raizDigitalFermat2 n | odd n = 5 | otherwise = 8 -- Comparación de eficiencia -- ========================= -- La comparación es -- λ> raizDigitalFermat 30 -- 8 -- (6.76 secs, 536,981,128 bytes) -- λ> raizDigitalFermat2 30 -- 8 -- (0.01 secs, 98,400 bytes) |
Nuevas soluciones
- En los comentarios se pueden escribir nuevas soluciones.
- El código se debe escribir entre una línea con <pre lang="haskell"> y otra con </pre>
Un comentario