Grado exponencial
El grado exponencial de un número n es el menor número x mayor que 1 tal que n es una subcadena de . Por ejemplo, el grado exponencial de 2 es 5 ya que 2 es una subcadena de 32 (que es
) y no es subcadena de las anteriores potencias de 2 (2, 4 y 16). El grado exponencial de 25 es 2 porque 25 es una subcadena de 625 (que es
).
Definir la función
1 |
gradoExponencial :: Integer -> Integer |
tal que (gradoExponencial n) es el grado exponencial de n. Por ejemplo,
1 2 3 4 5 6 |
gradoExponencial 2 == 5 gradoExponencial 25 == 2 gradoExponencial 15 == 26 gradoExponencial 1093 == 100 gradoExponencial 10422 == 200 gradoExponencial 11092 == 300 |
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 48 49 50 |
import Test.QuickCheck import Data.List (genericLength, isInfixOf) -- 1ª solución -- =========== gradoExponencial :: Integer -> Integer gradoExponencial n = head [e | e <- [2..] , show n `isInfixOf` show (n^e)] -- 2ª solución -- =========== gradoExponencial2 :: Integer -> Integer gradoExponencial2 n = 2 + genericLength (takeWhile noSubcadena (potencias n)) where c = show n noSubcadena x = not (c `isInfixOf`show x) -- (potencias n) es la lista de las potencias de n a partir de n^2. Por -- ejemplo, -- λ> take 10 (potencias 2) -- [4,8,16,32,64,128,256,512,1024,2048] potencias :: Integer -> [Integer] potencias n = iterate (*n) (n^2) -- 3ª solución -- =========== gradoExponencial3 :: Integer -> Integer gradoExponencial3 n = aux 2 where aux x | cs `isInfixOf` show (n^x) = x | otherwise = aux (x+1) cs = show n -- Equivalencia -- ============ -- La propiedad es prop_gradosExponencial_equiv :: (Positive Integer) -> Bool prop_gradosExponencial_equiv (Positive n) = gradoExponencial n == gradoExponencial2 n && gradoExponencial n == gradoExponencial3 n -- La comprobación es -- λ> quickCheck prop_gradosExponencial_equiv -- +++ OK, passed 100 tests. |
Referencia
Basado en la sucesión A045537 de la OEIS.
Pensamiento
«De cada diez novedades que pretenden descubrirnos, nueve son
tonterías. La décima y última, que no es necedad, resulta a última hora
que tampoco es nueva.»Antonio Machado