Suma de una fila del triángulo de los impares
Se condidera el siguiente triángulo de números impares
1 2 3 4 5 6 |
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 ................................ |
Definir la función
1 |
sumaFilaTrianguloImpares :: Integer -> Integer |
tal que (sumaFilaTrianguloImpares n) es la suma de la n-ésima fila del triángulo de los números impares. Por ejemplo,
1 2 3 4 5 |
sumaFilaTrianguloImpares 1 == 1 sumaFilaTrianguloImpares 2 == 8 length (show (sumaFilaTrianguloImpares (10^500))) == 1501 length (show (sumaFilaTrianguloImpares (10^5000))) == 15001 length (show (sumaFilaTrianguloImpares (10^50000))) == 150001 |
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 |
import Test.QuickCheck -- 1ª solución sumaFilaTrianguloImpares1 :: Integer -> Integer sumaFilaTrianguloImpares1 n = sum [n^2-n+1, n^2-n+3 .. n^2+n-1] -- 2ª solución sumaFilaTrianguloImpares2 :: Integer -> Integer sumaFilaTrianguloImpares2 = (^3) -- Equivalencia -- ============ -- La propiedad es prop_sumaFilaTrianguloImpares :: Integer -> Property prop_sumaFilaTrianguloImpares n = n > 0 ==> sumaFilaTrianguloImpares1 n == sumaFilaTrianguloImpares2 n -- La comprobación es -- λ> quickCheck prop_sumaFilaTrianguloImpares -- +++ OK, passed 100 tests. -- Comparación de eficiencia -- ========================= -- La comparación es -- λ> length (show (sumaFilaTrianguloImpares1 (10^7))) -- 22 -- (2.91 secs, 2,167,239,232 bytes) -- λ> length (show (sumaFilaTrianguloImpares2 (10^7))) -- 22 -- (0.01 secs, 102,584 bytes) |
El código se encuentra en GitHub.
También se puede hacer con Wolfram Alpha como se muestra en este enlace.