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 esun número natural.
Definir la función
raizDigitalFermat :: Integer -> Integer
tal que (raizDigitalFermat n) es la raíz digital del n-ésimo número de Fermat. Por ejemplo,
raizDigitalFermat 3 == 5 raizDigitalFermat (10^2021) == 8
Soluciones
-- 1ª solución -- =========== raizDigitalFermat :: Integer -> Integer raizDigitalFermat = raizDigital . fermat 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)