0votos

Suma de pares e impares en Haskell

por josejuan hace 3 años

.

Crear una clase que contenga un método al cual se le pase un número y que este retorne la suma de los numeros pares y de los numeros impartes. El numero que se le pasa al método es limitador a los numeros que hay que sumar.

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
{- 
 
    Sumemos todos los impares desde el 1 hasta el impar n-ésimo 
     
        S = 1 + 3 + 5 + ... + In 
     
    Como tenemos n impares, si sumamos 1 a cada impar, tendremos n pares 
     
        (1 + 1) + (3 + 1) + (5 + 1) + ... + (In + 1) 
     
    Es decir 
     
        S + n = 2 + 4 + 6 + ... + Pn 
     
    donde Pn es el par n-ésimo. 
     
    Sumando todos los impares y pares tenemos 
     
        S + S + n = 1 + 2 + 3 + 4 + 5 + 6 + ... + In + Pn 
     
    donde además resulta que es 
     
        Pn = 2 n 
     
    y dicha suma es 
     
        2 S + n = Pn (Pn + 1) / 2 = 2 n (2 n + 1) / 2 
     
    es decir, la suma de los impares hasta el impar n-ésimo es 
     
        S = n^2 
 
    Si en lugar de hasta el n-ésimo impar nos dicen hasta el número j será 
     
        n = Ceil( j / 2 ) = (j + 1) `div` 2 
         
-} 
 
sumParNon n = let nones = ((n + 1) `div` 2)^2 
                  todos = (n^2 + n) `div` 2 
              in  (nones, todos - nones) 
2 comentarios
0votos

Escrito por Matías Muñoz Espinoza hace 3 años

Me imagino que estará bien, no entiendo mucho haskel pero bueno. Gracias por resolver el desafio.
0votos

Escrito por josejuan hace 3 años

No hay mucho Haskell ahí :D sólo son las dos ecuaciones que dan el resultado solicitado, por ejemplo, en Javascript sería:
function sumParNon(n) {
  var nones = Math.pow((n + 1) >> 1, 2);
  var todos = (Math.pow(n, 2) + n) >> 1;
  return {nones: nones, pares: todos - nones};
}

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.