martes, 4 de febrero de 2025

Regresos 14 – (1) Bases de tres cubos con suma cero

Hace unos años publiqué en este blog un estudio sobre las sumas de cubos cuyas bases suman cero. Lo restringí a las sumas de tres cubos.

Releyendo la entrada he visto que le sobra mucho material y que algunos aspectos de la cuestión no están bien explicados. Regresamos a ella para completarla y quitarle cuestiones poco interesantes.

Comenzaba así:

Otro estudio más que se basa en mis cálculos en Twitter (@connumeros). El día 22/3/2020 publiqué:

22320 se puede representar mediante dos sumas de cubos cuyas bases suman 0:

22320=(-16)^3+(-15)^3+31^3, con 31+(-15)+(-16)=0

22320 =(-60)^3+(-2)^3+62^3 y 62+(-2)+(-60)=0

No son muchos relativamente los números que cumplen una propiedad similar. Comenzaremos con aquellos que presenten suma de cubos cuyas bases sumen cero al menos una vez. El primero es el 6, que se puede representar como 6=2^3+(-1)^3+(-1)^3, con 2+(-1)+(-1)=0

Función adecuada

Todo el planteamiento del problema se basa en que N sea entero positivo, pues el caso contrario es equivalente en su planteamiento. Para que la suma de bases sea cero y la de cubos positiva deberá existir un cubo positivo y dos negativos, pues en ese caso la base del positivo será la suma de las los negativos, es decir, que el esquema de la suma sería (p+q)^3-p^3-q^3. Cualquier otro planteamiento daría suma no nula o negativa.

Para la búsqueda que sigue es preferible llamar p a la base del cubo positivo y a las negativas -q y –(p-q). Cualquier otra nomenclatura también nos serviría. Así que trabajaremos con el esquema  N=p3-q3-(p-q)3, con p>q

Si partimos de esa igualdad, desarrollando, N=p3-q3-(p3-3p2q+3pq2-q3)=3p2q-3pq2=3pq(p-q). Equivale a afirmar que N es el triple del producto de los valores absolutos de las bases de los cubos

Esta expresión 3pq(p-q) nos servirá para construir una parada en la búsqueda, exigiendo que 3pq(p-q)<=N para cada valor de p y q y que en el caso de la igualdad haga finalizar la búsqueda. Es más rápido así. También nos indica que N ha de ser múltiplo de 6, ya que pq(p-q) es siempre par.

Versión para Excel

La siguiente función actúa sobre un número natural y devuelve una cadena de texto, que puede estar vacía o contener la primera solución que se encuentre. Este es su listado:

Function cubossum(n)
Dim i, j, a
Dim es
Dim s$

If n Mod 6 <> 0 Then cubossum = "": Exit Function ‘Da salida si no es múltiplo de 6
es = False ‘Parará el proceso si se encuentra solución
i = 1  ‘Contador para la variable p
s = ""  ‘Cadena de texto para el resultado
a = 0 ‘Contendrá la suma de cubos
While a <= n And Not es ‘Se para si se llega a n o se encuentra una suma
j = 1 ‘Contador de la variable q
While j < i And Not es
a = 3 * i * j * (i - j) ‘Expresión buscada
If a = n Then es = True: s = s + Str$(j) + Str$(i) ‘Se encuentra solución
j = j + 1
Wend
i = i + 1
Wend
cubossum = s
End Function

Con esta función podemos organizar una búsqueda de aquellos números que presentan la descomposición buscada. Los primeros son:

Cada número encontrado viene acompañado del valor de q y el de p. Así, para 210, q=2 p=7, luego 210 = 73-23-(7-2)3 = 73-23-53 = 343-8-125 = 210

Un listado más completo es

6, 18, 36, 48, 60, 90, 126, 144, 162, 168, 210, 216, 252, 270, 288, 330, 360, 378, 384, 396, 468, 480, 486, 540, 546, 594, 630, 720, 750, 792, 816, 858, 918, 924, 972, 990, 1008, 1026, 1140, 1152, 1170, 1260, 1296, 1344, 1386, 1404, 1518, 1530, 1560, 1620, 1638, 1656, 1680, 1728, 1800…

Hemos publicado esta sucesión en https://oeis.org/A333821

Todo esto se puede traducir al lenguaje PARI:

ok(n) = {my(i=1,a=0,m=0,j);if(n%6==0,while(a<=n&&m==0,j=1;while(j<i&&m==0,a=3*i*j*(i-j);if(a==n,m=1);j+=1);i+=1)); m}

{for(p=1,2000,if(ok(p),print1(p,", ")))}

Si lo pruebas en https://pari.math.u-bordeaux.fr/gp.html obtendrás la lista de los primeros números que cumplen esta descomposición:

6, 18, 36, 48, 60, 90, 126, 144, 162, 168, 210, 216, 252, 270, 288, 330, 360, 378, 384, 396, 468, 480, 486, 540, 546, 594, 630, 720, 750, 792, 816, 858, 918, 924, 972, 990, 1008, 1026, 1140, 1152, 1170, 1260, 1296, 1344, 1386, 1404, 1518, 1530, 1560, 1620, 1638, 1656, 1680, 1728, 1800,…

 

Algoritmo más rápido

En el anterior planteamiento no se aprovecha el hecho de que p, q y p-q son divisores de N/3 y por eso en los bucles de búsqueda se prueban demasiados valores inútiles. En la siguiente versión se consigue más velocidad, y se han añadido al resultado todas las posibilidades de forma más clara, así como el añadido al principio del número de soluciones, Este sería el listado de la nueva función:

Function cubossum2$(n)
Dim p, q, r, m
Dim s$

If n Mod 6 <> 0 Then cubossum2 = "NO": Exit Function
s = " sol: "
m = 0 ‘Nuevo: contador de soluciones
For p = 2 To n / 3
If n / p = n \ p Then ‘Sólo se admite p si es divisor
For q = 1 To p - 1
If n / q = n \ q Then ’ También q ha de ser divisor
r = p – q ‘Tercera base de cubos
‘Prueba para identificar una solución y su incorporación
If n = 3 * p * q * r And r <= q Then m = m + 1: s = s + " # " + ajusta(p) + "^3+(-" + ajusta(q) + ")^3+(-" + Str$(r) + ")^3"
End If
Next q
End If
Next p
s = Str$(m) + s ’Se incorpora el contador de soluciones
cubossum2 = s
End Function

Así quedan las primeras soluciones, con más información que en la función anterior:

 


Ahora se perciben mejor las soluciones múltiples, que serán objeto del siguiente apartado.

Resultados múltiples

Algunos de estos números presentan varias descomposiciones. El primero es 90, que admite las dos sumas 90=5^3-3^3-2^3 y 90=6^3-5^3-1^3. Después le siguen estos:


Si adaptamos a PARI obtenemos un listado más extenso:

90, 630, 720, 1170, 1260, 1386, 2430, 2640, 3024, 3060, 3168, 3366, 3570, 4446, 5040, 5760, 5940, 6210, 6300, 6930, 8910, 9360, 10080, 11088, 11250, 12480, 12870, 12960, 14490, 14742, 16380, 17010, 18018, 18270, 18810, 19440, 19890, 21120, 22140, 22320, 23310, 24192, 24480, 24570, 25344, 25740, 26928, 27360, 27720, 28560, 29700, 30870, 31590, 31920, 34020, 35568, 36630, 37296, 37422, 39330, 40320, 41328, 42120, 42840, 43056, 44460, 45408, 46080, 47250, 47520, 49680,…

Se ha usado el código

ok(n) = {my(p,q,r,m=0);if(n%6==0,for(p=2,n/2,if(n%p==0,for(q=1,p-1,if(n%q==0,r=p-q;if(n==3*p*q*r&&r<=q,m+=1)))))); m}

{for(p=1,30000,h=ok(p);if(h>1,print1(p,", ")))}

Destaca el 720 con tres descomposiciones:

720=10^3-6^3-4^3=12^3-10^3-2^3=16^3-15^3-1^3

El primero con 4 es 19440: 19440=30^3+(-18)^3+(-12)^3=36^3+(-30)^3+(-6)^3=48^3+(-45)^3+(-3)^3=81^3+(-80)^3+(-1)^3

Con cinco hemos obtenido el 55440, equivale a estas sumas:  

55440=42^3+(-22)^3+(-20)^3=44^3+(-30)^3+(-14)^3=55^3+(-48)^3+(-7)^3=70^3+(-66)^3+(-4)^3=80^3+(-77)^3+(-3)^3

Lo dejamos aquí, porque nuestros instrumentos de cálculo se ralentizan con números grandes. En la siguiente entrada estudiaremos el caso de cuatro cubos.

miércoles, 22 de enero de 2025

Regresos 13 - Diferencia de potencias

En este blog hemos tratado frecuentemente las diferencias de cuadrados y, recientemente, las de cubos. Parecía conveniente intentar una generalización a pares de potencias de cualquier exponente.

Para ello nos basaremos en la conocida fórmula

Para nuestro estudio es preferible expresar la diferencia de potencias como (a+h)k- ak

Observamos que se puede extraer factor común la diferencia h:


Expresión de un número N como diferencia de potencias

Si igualamos la anterior expresión a N, llegaremos a una conclusión interesante:

Si un número entero positivo N es expresable como diferencia de potencias, (a+h)k - ak, la diferencia h entre las bases ha de ser divisor de N

Esto nos da una base segura para las búsquedas, pero es que, además, con esa fórmula, tal como efectuamos para los cubos (ver mi entrada http://hojaynumeros.blogspot.com/2024/09/diferencias-de-cubos-enteros-positivos.html), obtenemos una cota para el valor de a:

Sería kak-1h menor que la diferencia de potencias, o lo que es igual, que N. Así que tendríamos:


Con esta cota y el carácter de divisor de h ya podemos intentar determinar si un número N es expresable o no como diferencia de potencias de exponente dado.

Ya se vio en la entrada enlazada que en el caso de los cubos la acotación era

Una idea sencilla es que si un número es diferencia de dos potencias de exponente k, si lo multiplicamos por otro número bk obtendremos otro número con la misma propiedad. De aquí deducimos que este tipo de números forma una sucesión infinita para cualquier valor de k, ya que el primero siempre existe.

 Función de búsqueda

Con esta base teórica podemos construir una sencilla función de búsqueda:

Function espotencia_igual(n, k)’Parámetros número y exponente
Dim a, h, tope
Dim s$

s = "" ’Contenedor de soluciones
For h = 1 To n / 2 ‘Posibles valores de h
If n / h = n \ h Then ‘Es divisor
tope = Int((n / k / h) ^ (1 / (k - 1))) ‘Tope calculado para h
For a = 1 To tope ‘Si es diferencia de potencias, se publica
If (a + h) ^ k - a ^ k = n Then s = s + "# " + Str$(a) + ", " + Str$(a + h)
Next a
End If
Next h
If s = "" Then s = "NO"
espotencia_igual = s
End Function

Por ejemplo, para k=4 obtenemos todos los números expresables como b4-a4 (y por tanto, también como m2-n2) y con divisor diferencia de cuadrados. Igualmente, por el Teorema de Fermat, no existirá entre ellos ninguna cuarta potencia:


Están publicados en https://oeis.org/A147857

En esta sucesión y en las que seguirán sólo podrán aparecer números primos si h=1, según las fórmulas de los primeros párrafos de esta entrada. En este caso de k=4 no aparecerán, porque b4-a4 es múltiplo de b2-a2, que no valdrá 1 para b>a. Ocurrirá lo mismo en todos los casos en los que el exponente sea número compuesto.

Según un comentario de OEIS, no figuran cuadrados en esta sucesión. Hemos visto alguna demostración similar y resulta larga y complicada.

Para k=5 obtenemos:

Al ser el exponente primo impar, sí pueden figurar primos en esta sucesión, para h=1. Los primeros son estos:

 

Tal como se comentó ya, el valor de h ha de ser 1, o bien a y b consecutivos.

Están publicados en https://oeis.org/A121616 , y ahí se sugiere el nombre de primos “pentan”, por analogía con los primos “cubanos”, ya estudiados en este blog.

También figuran cuadrados, como 7744=88^2=6^5-2^5.

Así podríamos seguir con otros valores de exponentes.

Versión en PARI

Sabemos que las hojas de cálculo no pueden manejar bien los números grandes. Para ello son mejores otras herramientas, como el lenguaje PARI. Hemos creado una rutina que devuelve las formas, si existen, de expresar un número como diferencia de potencias en varios casos de exponentes. En el ejemplo lo hemos aplicado al número 7744 y exponentes en un rango de 3 a 20, pero todo eso se puede cambiar.

n=7744;for(k=3,20,for(h=1,n/2,if(n%h==0,tope=(n/h/k)^(1/(k-1));for(a=1,tope,if((a+h)^k-a^k==n,print("# n=",n," k=",k," a=",a," b=",a+h))))))

Nos devuelve algo ya conocido:

 


 Nos indica que 7744 se expresa con exponente 5 como diferencia 65-25.

Si no nos importa dejar a nuestro equipo varios minutos calculando, podemos investigar todo un rango de números, con esta otra versión:

for(n=1000,2000,for(k=4,20,for(h=1,n/2,if(n%h==0,tope=(n/h/k)^(1/(k-1));for(a=1,tope,if((a+h)^k-a^k==n,print("# n=",n," k=",k," a=",a," b=",a+h)))))))

Aquí le hemos añadido al código un bucle entre 1000 y 2000, con este resultado:


Destaca el número 1023, y es fácil adivinar la razón.
 

 

miércoles, 8 de enero de 2025

Números refactorizables

Estudiando el número 2025 se descubre que tiene 15 divisores, y que este número 15 es divisor de 2025. Por eso, cumple la definición de número refactorizable o “tau”, porque si llamamos función TAU al número de divisores de N, en estos números se cumple que N/TAU(N) es un entero. En el caso de 2025 se cumple que 2025/15=135.

Un número se llama refactorizable o tau si es múltiplo del número de sus divisores.

Para descubrir si un número es de este tipo, habrá que calcular TAU y efectuar el cociente N/TAU(N) para analizar si es entero.

El cálculo de TAU es bastante simple:

TAU(N)=(1+a1)(1+a2)…(1+ak), donde a1, a2, …ak son los exponentes de los factores primos de N.

Si no se desea descomponer el número en factores primos se puede usar la función que publicamos en https://hojaynumeros.blogspot.com/search?q=tau%28

Con esta condición y un buscador se obtienen los primeros números refactorizables:

Están publicados en https://oeis.org/A033950

De entrada nos damos cuenta de que el único número primo de este tipo es el 2, porque todos los demás son impares, y no pueden ser múltiplos del número de sus divisores, que es 2.

Algo parecido ocurre con las potencias de primos, en las que el cuadrado posee tres divisores, luego el único cuadrado de primo refactorizable es 9=32. Del mismo modo se puede razonar que 8 es el único cubo de primo que cumple la definición. Podemos ampliar la condición a números del tipo pp-1, como 625.

Un número impar refactorizable no puede tener un número par de divisores. En la fórmula TAU(N)=(1+a1)(1+a2)…(1+ak) todos los factores deberán ser impares, y, por tanto, todos los ai pares, por lo que N deberá ser un cuadrado:

Sólo los números impares que son cuadrados pueden ser refactorizables.

En la lista de refactorizables no hay números libres de cuadrados salvo 1 y 2. La razón es sencilla: si N no contiene cuadrados, todos sus factores primos estarán elevados a la unidad, luego su número de divisores será TAU(N)=2*2*2*2*2…=2n y esto obliga a que N contenga al cuadrado de 2, salvo 1 y 2

Todos los números refactorizables, salvo 1 y 2, contienen un cuadrado entre sus divisores.

Refactorizables consecutivos

Existen números consecutivos que son ambos refactorizables. Con nuestros buscadores se llega fácilmente a los primeros pares:

En https://oeis.org/A114617 puedes consultar una lista más amplia.

Se ha demostrado que no existen ternas de consecutivos entre los números de este tipo entre los que poseen pocas cifras. Las condiciones con tan exigentes que se ha dejado su no existencia como conjetura, ya que no se han encontrado ternas entre 1 y 1053.

Conjuntos de cuatro o más consecutivos no pueden existir, porque habría entre ellos dos números impares, que deberían ser cuadrados y presentar una diferencia menor que 5, y eso no es posible.

Podemos plantearnos diferencia 2:

Esta sucesión está inédita.

Otras variantes de la cuestión

Podemos investigar los cocientes N/TAU(N) en sus casos particulares.

Entre los primeros números refactorizables tenemos:

Sólo el 1 y el 2 presentan cociente 1.

Sólo el 8 y el 12 son el doble de su número de divisores.

Los números 9, 18 y 24 son el triple de su función TAU.

Otros casos:

Podemos formar una tabla con los siguientes posibles cocientes:

Cociente    Encontrados

4                  36
5                  40, 60
6                  72
7                  56, 84
8                  80, 96
9                  108
10                180
11                88, 132
12                240

 A la vista de estos resultados queda clara una propiedad:

Todos los números del tipo 12p, con p primo impar, son refactorizables, y el cociente N/TAU(N) es exactamente p.

Es fácil demostrarlo. Al ser TAU una función multiplicativa tendremos TAU(12p)=TAU(12)TAU(p)=6*2=12, porque 12 y p son primos entre sí, luego el cociente pedido será p.

(Ver mi publicación Funciones multiplicativas https://www.hojamat.es/publicaciones/multifun.pdf)

¿De qué tipo es el cociente N/TAU(N)?

Cuadrado

Hemos buscado cocientes cuadrados y descubriendo que son frecuentes:

Están publicados en https://oeis.org/A145450

Triangular

Es similar a la anterior sucesión, pero no está publicada:

Primos

Ya se demostró que todos los enteros de tipo 12p con p primo impar, tienen como cociente p, pero pueden que existan más ejemplos. Los hemos buscado y resulta que los del tipo 8p con p primo e impar también son refactorizables, ya que, al ser 8 y p primos entre sí, TAU(8p)=TAU(8)*TAU(p)=4*2=8, luego el cociente es p.

Además de estos casos existen otros números refactorizables con cociente primo, pero sólo hemos encontrado el 9 y el 18, con cociente 3.

 

 

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.