jueves, 24 de diciembre de 2009

Suma de tres números triangulares

En 1796, Gauss descubrió que todo entero positivo puede representarse como la suma de un máximo de tres números triangulares. Estos pueden ser iguales, y si consideráramos el 0 como triangular, podríamos afirmar que todo número natural es suma de tres triangulares.

Un ejercicio interesante es el de descubrir un algoritmo que los encuentre. Para hacerlo más formativo podemos basarnos en dos funciones, una para descubrir si un número es triangular y otra que nos devuelve el mayor triangular mayor o igual que un número dado.

Función estriangular
Si un número N es triangular verificará igualdad N=x(x+1)/2, con x y N ambos enteros, lo que obliga a que 8*N+1 sea cuadrado perfecto ¿por qué?. Esto nos lleva a este código:

Public function estriangular(n) as boolean
dim a

a = Int(sqr(8*n+1))

if a*a=8*n+1 then estriangular = true else estriangular = false
end function

Función mayortriang

Para encontrar el mayor triangular contenido en un número N bastará resolver la ecuación N=x(x+1)/2 truncando el resultado a un número entero. Así que quedará:

Public Function mayortriang(n)
dim a
a = Int((sqr(8*n+1)-1)/2)
mayortriang=a*(a+1)/2

end function


Con esto ya tenemos preparado un algoritmo para OpenOffice.org Calc (fácilmente adaptable a Excel) que encuentre todas las descomposiciones en tres triangulares (incluido el cero):

Sub sumatriangulares
Dim i,j,k

dim a,b
i=StarDesktop.CurrentComponent.sheets(0).GetCellByPosition(3,3).value (se supone que el número se escribe en la celda D4)
a=mayortriang(i)
for j=0 to a (se recorren los valores posibles del primer sumando)
if estriangular(j) then
b=mayortriang(i-j)

for k=j to b
(se recorren los valores posibles del segundo sumando)
if estriangular(k) then
if estriangular(i-j-k) and i-j-k>=k then (el tercer sumando ha de ser triangular)
msgbox(j) (se presenta el resultado)
msgbox(k)

msgbox(i-j-k)
end if

end if

next k

end if
next j

End Sub


Pues ánimo y a implementarlo. Puedes añadir una variable que cuente todas las formas de descomposición que tiene un número. Por ejemplo, entre los de tres cifras hay uno que admite 24 sumas distintas de triangulares ¿Cuál?

No hay comentarios: