¿Cómo sumar los números impares en un triángulo con Python?

Se quieres sumar los números impares, que tienen la siguiente distribución

      1
     3 5
   7 9 11
 13 15 17 19
 ...

Para entender la lógica, primero definimos una función que nos muestre estos números:

In [1]:
def imprimir(n):
    fila = 1
    cantidad_fila = 1 # cuantos numeros hay en la fila
    numero_inicio = 1 # el numero de inicio
    while fila <= n:
        s = ''
        for i in range(fila):
            s += ' '+str(numero_inicio)
            numero_inicio += 2
        print(s)
        fila += 1
        cantidad_fila += 1
imprimir(9)
 1
 3 5
 7 9 11
 13 15 17 19
 21 23 25 27 29
 31 33 35 37 39 41
 43 45 47 49 51 53 55
 57 59 61 63 65 67 69 71
 73 75 77 79 81 83 85 87 89

Podemos reducir la función teniendo en cuenta que fila y cantidad_fila, siempre son iguales:

In [2]:
def imprimir(n):
    fila = 1 # inica la fila actual, y cuantes elementos hay
    numero_inicio = 1 # el numero de inicio
    while fila <= n:
        s = ''
        for i in range(fila):
            s += ' '+str(numero_inicio)
            numero_inicio += 2
        print(s)
        fila += 1
imprimir(4)
 1
 3 5
 7 9 11
 13 15 17 19

Sumar todos los elementos hasta la fila n

Tomando como referencia la funcion imprimir(), definimos la siguiente función

In [14]:
def sumar_todo(n):
    fila = 1 # inica la fila actual, y cuantes elementos hay
    numero_inicio = 1 # el numero de inicio
    ans = 0 # suma en la fila n
    while fila <= n:
        for i in range(fila):
            ans += numero_inicio # aqui sumamos la fila
            numero_inicio += 2
        fila += 1
    return ans
sumar_todo(3)
Out[14]:
36
In [15]:
for x in range(5):
    ans = sumar_todo(x)
    print(ans)
0
1
9
36
100

Sumar los elementos de una fila

Para sumar los números de una fila, declaramos la siguiente función con similar lógica

In [7]:
def sumar_fila(n):
    fila = 1 # inica la fila actual, y cuantes elementos hay
    numero_inicio = 1 # el numero de inicio
    ans = 0 # suma en la fila n
    while fila <= n:
        for i in range(fila):
            if n == fila:
                ans += numero_inicio # aqui sumamos la fila
            numero_inicio += 2
        fila += 1
    return ans
sumar_fila(4)
Out[7]:
64

Veamos las suma de las primeras 10 filas

In [8]:
for x in range(10):
    ans = sumar_fila(x)
    print(ans)
0
1
8
27
64
125
216
343
512
729

Vemos que cada número es un cubo perfecto, entonces si sacamos su raiz cúbica tenemos:

In [9]:
import math
for x in range(10):
    ans = sumar_fila(x)
    print(ans,math.pow(ans,1/3))
0 0.0
1 1.0
8 2.0
27 3.0
64 3.9999999999999996
125 4.999999999999999
216 5.999999999999999
343 6.999999999999999
512 7.999999999999999
729 8.999999999999998

Es decir para la fila $n$ la suma en dicha fila es $n^3$

No hay comentarios.:

Publicar un comentario