miércoles, 18 de diciembre de 2024

Sumas de potencias consecutivas

Existen fórmulas para sumar las primeras potencias de números naturales. Son populares las de la suma de potencias con los primeros exponentes. En esta captura de Excel figuran algunas:

Aquí deseamos usar potencias consecutivas, pero que no comiencen necesariamente por la unidad. Si se usa la fórmula correspondiente, el problema se resuelve restando. Por ejemplo, una suma de potencias entre ak y bk se encontraría restando la fórmula correspondiente a b y la de a-1, para que se incluya también a. No será ese el camino que se tome aquí, porque deseamos encontrar la suma con un algoritmo que sirva para todos los exponentes. No obstante, dejamos abierta la posibilidad de comprobar algún cálculo.

Nuestro objetivo es más ambicioso, y es encontrar una suma de potencias consecutivas que sea equivalente a otra potencia dada, como en los ejemplos que siguen:

47^3=22^2+23^2+24^2+…+67^2+68^2
6^3=3^3+4^3+5^3
20^3=11^3+12^3+13^3+14^3

Deberemos fijar dos parámetros, el exponente de la potencia resultado de la suma, sea, por ejemplo k, y el de los sumandos, que es igual para todos, y llamaremos h. De esa forma también abarcamos la posibilidad de que el resultado no sea una potencia, salvo la trivial de exponente unidad:

 294 =7^2+8^2+9^2+10^2 (k=1)

A la inversa, deberemos poder descomponer una potencia en suma de números naturales consecutivos, como potencias triviales:

12^5=82943+82944+82945 (h=1)

En la siguiente función usamos tres variables distintas, e integramos los resultados en modo texto:

n: base del total de la suma

k: exponente de n

h: exponente de los sumandos

m: total de sumandos en cada solución. Esta es útil para búsquedas.

Function sumapoteconsec$(n, k, h)
Dim p, s, i, j,m
Dim t$

t = "" ‘Texto vacío para incluir soluciones
p = n ^ k ‘Resultado deseado para la suma
For i = 1 To (n – 2)^(k/h) ‘Tope de búsqueda de sumandos
s = i ^ h ’Primer sumando potencia
j = i
While s <= p
If s = p And j > i Then m=j-i+1:t = t + " #" + ajusta(m)+”: “+Str$(i) + " a " + Str$(j)’Solución con número de sumandos, inicio y final
j = j + 1
s = s + j ^ h ‘Se acumula la suma
Wend
Next i
If t = "" Then t = "NO"
sumapoteconsec = t
End Function

Vemos algunos ejemplos obtenidos con esta función:

SUMAPOTECONSEC(30;1;1)= #5:  4 a 8 #4:  6 a 9 #3:  9 a 11

Significa que el número 30 (elevado a la unidad) es suma de números consecutivos de tres formas diferentes:

#5: 4 a 8 : 30=4+5+6+7+8
#4: 6 a 9 : 30=6+7+8+9
#3: 9  a 11 : 30=9+10+11

SUMAPOTECONSEC(990;1;2)= #5:  12 a 16

El número 990 es igual a la suma de cinco cuadrados:

990=122+132+142+152+162

Comprobamos el primer ejemplo de este texto:

SUMAPOTECONSEC(47;3;2)= #47:  22 a 68

Equivale a lo que ya sabíamos:

47^3=22^2+23^2+24^2+…+67^2+68^2

El cubo de 47 es suma de 47 cuadrados consecutivos.

Podríamos comprobarlo en una hoja de cálculo como indicamos en los primeros párrafos, restando la fórmula de la suma de cuadrados en 68 y en 21:

(2*68^3+3*68^2+68)/6-(2*21^3+3*21^2+21)/6=103823=47^3

Versión en PARI

Para quienes deseen llegar a números grandes, se ofrece aquí una alternativa en PARI:

smpc(n,k,h)={my(v=[0,0],p=n^k,s,i,j);for(i=1,(n-2)^(k/h),s=i^h;j=i;while(s<=p,if(s==p&&j>i,v=[i,j];print(v));j+=1;s=s+j^h));v}

print(smpc(540,1,1))

Imprime las soluciones parciales y aparece repetida la final. Se podría corregir este detalle, pero al algoritmo va rápido y no merece la pena suprimirlo.

Solución para smpc(540,1,1)


Solución para smpc(47,3,2), que fue nuestro primer ejemplo:

Confirma que el cubo de 47 es la suma de los cuadrados que van del 222 a 682.

Un ejemplo para confirmar:

smpc(29008,1,5)

¿Por qué ese número?

Vemos la solución:

Resulta que es la suma de las primeras siete potencias quintas. Es así porque el número 29008 lo hemos obtenido aplicando la fórmula presentada al principio de la entrada:

S=(2*7^6+6*7^5+5*7^4-7^2)/12=29008.

Ejemplos concretos

Cubos que son suma de cubos

Acudimos a PARI, que es más rápido, para comprobar que 1155 posee esa propiedad:

k=1155;print(smpc(k,3,3))

Nos da que 1155^3 es igual a la suma de todos los cubos comprendidos entre 291^3 y 339^3


Consultar
https://oeis.org/A097811)

Este resultado no se podría haber descubierto razonablemente con cálculo manual. Lo hemos comprobado con hoja de cálculo.

Cuadrados que son suma de cubos

Al efectuar una búsqueda de todos los casos, aparecen, entre otros, los números triangulares, por la conocida fórmula


Si buscamos los ejemplos de esta propiedad, encontraremos todos los números triangulares ordenados por su orden. En la siguiente imagen descubrimos que aparecen otros, como el 204, que no son triangulares. Son aquellos en los que la suma de cubos no comienza en 1
3:


Podemos crear un listado con los números cuyo cuadrado es suma de cubos pero que no son triangulares:

Como era de esperar, ninguna suma de cubos comienza con 13

Cubos que son suma de cuadrados

Este ejemplo es bastante conocido, pero con nuestras funciones podemos encontrar otros.

47^3=22^2+23^2+…+68^2

Este sería un buen ejemplo:

13156^3=2277044900416 es la suma de todos los cuadrados comprendidos entre 173542 y 229302


Podemos usar la fórmula para sumar cuadrados, como comprobación:

22930*22931*(22930*2+1)/6-17353*17354*(17353*2+1)/6


Otras igualdades

Podemos usar lo aprendido para encontrar más igualdades en las que una potencia sea igual a la suma de varias otras potencias consecutivas. Esta es una muestra de lo encontrado con los primeros números como bases.

6^3=3^3+4^3+5^3
6^4=1^3+2^3+3^3+4^3+5^3+6^3+7^3+8^3
13^4=119^2+120^2
20^3=11^3+12^3+13^3+14^3

 

miércoles, 4 de diciembre de 2024

Regresos 12 - El problema del albañil

Este problema consiste en encontrar qué números N poseen un cuadrado N2 que sea suma de cubos consecutivos. Se consideran cubos mayores que 1, pues todos los números triangulares poseen cuadrados que son suma de los primeros cubos, según la conocida fórmula 13+23+33+43+…n3=(n(n+1)/2)2, y se desea eliminar un exceso de casos triviales.

Se exige también que el número de cubos sea al menos de tres. Según la página https://oeis.org/A238099, un ejemplo es el de

312^2 = 97344 = 14^3 + 15^3 + ... + 25^3.

El nombre y las condiciones del problema (por ejemplo, que se use el cuadrado del número) vienen de un ejercicio propuesto en un libro de Dudeney:

H. E. Dudeney, Amusements in Mathematics, Nelson, London, 1917, Problem 135.

Lo podemos consultar en https://archive.org/details/amusementsinmath00dude/page/24/mode/1up?view=theater

Su enunciado es un tanto artificioso, pero sirvió de base para estudiar con más profundidad las sumas de cubos consecutivos. El problema, como vemos, está resuelto, pero aquí estudiaremos los algoritmos que lo pueden resolver en una hoja de cálculo.

Hemos catalogado esta entrada como regreso, porque complementa otra nuestra de 2013, https://hojaynumeros.blogspot.com/2013/04/las-sumas-de-cubos-nos-llevan-los.html

En ella estudiábamos las sumas de cubos consecutivos, pero las derivábamos a otras cuestiones, como las ternas pitagóricas. Nos dedicaremos al problema del albañil, pero podremos referirnos a algún resultado contenido en esa entrada de hace años.

Desde hace un tiempo se prefieren en este blog las funciones que devuelven un texto. Son más explicativas y no dificultan búsquedas posteriores si se saben construir. En este caso del problema del albañil adaptaremos específicamente alguna otra función similar. La que presentamos da las soluciones de sumas de cuadrados sólo cuando se excluye el 1 y se exigen al menos tres sumandos. Su código para Excel y Libreoffice Calc es el siguiente:

Function albanil$(n)
Dim i, j, a, n1
Dim s$
Dim novale As Boolean

s = "" ‘Contenedor de la solución
n1 = n ^ 2 ‘Trabajamos con el cuadrado
i = Int(n1 ^ (1 / 3)) ’Máximo cubo contenido en n^2
novale = True ‘Suponemos que no hay solución
While i > 1 And novale ‘Desciende el mayor cubo hasta 2^3
a = i ^ 3 ‘Primera suma de cubos
j = i’Cubo inicial de la suma
While j > 1 And a <= n1 And novale
‘Se llega a la solución de tres cubos o más
If a = n1 And i - j > 2 Then s = s + "Desde" + Str$(j) + " hasta " + Str$(i): novale = False ‘novale ya no es cierto
j = j – 1’Desciende el primer cubo
a = a + j ^ 3’Se incrementa la suma
Wend
i = i – 1’Desciende el último cubo
Wend
If novale Then s = "NO"
albanil = s
End Function

Con esta función y un buscador podemos reproducir la lista publicada de soluciones:

Estos resultados coinciden con los publicados en https://oeis.org/A238099, luego nuestro primer objetivo está cumplido.

Usamos números triangulares

Recordamos la siguiente equivalencia:

Según ella, una suma de cubos que no comience con 1 será equivalente a una diferencia de los cuadrados de dos números triangulares.

Esto nos permite utilizar la diferencia entre los cuadrados de dos números triangulares para identificar las sumas de cubos. Así obtendríamos una variante alternativa a la vista en anteriores párrafos.

Para encontrar los dos números triangulares basta descomponer N en productos de suma por diferencia de dos números, ya que eso equivale a una diferencia de cuadrados. Una vez obtenidos se les exige que sean triangulares y que sus órdenes se diferencien en más de 3 unidades.

Descomponemos N en productos de la misma paridad, N=pq y después definimos a=(p+q)/2 y b=(p-q)/2, con lo que tendríamos los posibles triangulares. Es una técnica que hemos usado a menudo. Después analizamos si son triangulares con las funciones estriangular y ordentriang, muy usadas en este blog.

Function estriangular(n) As Boolean
Dim a
a = Int((Sqr(8 * n + 1) - 1) / 2)
If a * (a + 1) = 2 * n Then estriangular = True Else estriangular = False
End Function

Public Function ordentriang(n)
Dim k
If estriangular(n) Then k = Int((Sqr(8 * n + 1) - 1) / 2) Else k = 0
ordentriang = k
End Function

El código de esta función es:

Function albanil2$(n)
Dim i, j, p, q, a, b, n1
Dim s$
Dim novale As Boolean

s = "" ‘Contenedor de la solución
n1 = n ^ 2 ’Trabajamos con el cuadrado
i = 1 ‘Primer divisor
novale = True
While i <= n And novale
If n1 / i = n1 \ i Then ‘Es divisor
j = n1 / i ‘Divisor complementario
If (j - i) Mod 2 = 0 Then ‘Tienen la misma paridad los factores
p = (i + j) / 2: q = (j - i) / 2 ‘Vamos construyendo la diferencia de cuadrados
If estriangular(p) And estriangular(q) Then
a = ordentriang(p): b = ordentriang(q) ‘Son ambos triangulares
If a - b > 3 And b > 1 Then s = s + "Desde" + Str$(b + 1) + " hasta " + Str$(a): novale = False
End If
End If
End If
i = i + 1
Wend
If novale Then s = "NO"
albanil2 = s
End Function

En la entrada a la que regresamos hoy se termina considerando que los dos triangulares de la diferencia de cuadrados y el número N estudiado forman una terna pitagórica, pero este tema es preferible leerlo en la entrada original.

Con esto cumplimos nuestro objetivo, que era sólo algorítmico.