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
En este blog llevamos tiempo usando funciones para estudiar
algunas cuestiones. Es un método bastante flexible y que facilita una
traducción entre lenguajes. Después usaremos una rutina para comprobar.
En primer lugar, hay que destacar que esta condición se
puede simplificar. En lugar de usar la igualdad N=p3-q3-r3,
dado que p=q+r, podemos representar r como p-q. Según esto, la condición sería
N=p3-q3-(p-q)3.
Si partimos de esa igualdad, desarrollando, N=p3-q3-(p3-3p2q+3pq2-q3)=3p2q-3pq2=3pq(p-q).
Esta expresión 3pq(p-q) nos servirá para construir una
parada en la búsqueda, exigiendo que 3pq(p-q)<=N y también para sustituir a
N=p3-q3-r3. 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…
Rutina de
comprobación
Para comprobar este listado podemos usar técnicas de Excel,
ya que permite la creación de listas usando sus flas o columnas. Lo podemos
efectuar en tres fases:
1.
Se recorren todos los valores posibles de p3-q3-(p-q)3
hasta cierto tope.
2.
Se vuelcan todos en la columna A. Aparecerán
desordenados y repetidos
3.
Se usan los comandos del apartado Datos para
ordenar y eliminar duplicados.
En la primera fase usaremos una macro en lugar de una
función, para que se puedan situar las soluciones en la columna A. Hemos usado
esta:
Sub cuboss()
Dim i, j, k, v
k = 0 ‘Esta variable representa la fila
en la que se va a escribir
For i = 1 To 40 ‘Con
dos bucles completos se recorren las sumas tipo p3-q3-(p-q)3
For j = 1 To i - 1
k = k + 1 ‘Se incrementa la fila,
para escribir en columna
v = i ^ 3 - j ^ 3 - (i - j) ^ 3 ‘Expresión
buscada
ActiveWorkbook.Sheets(1).Cells(k, 1).Value =
v ‘Se añade a la columna A
Next j
Next i
End Sub
Hemos elegido un tope de 40 en la búsqueda. Para casos
sencillos parece excesivo.
Se volcarán los resultados de esta forma:
Tal como esperábamos, aparecen desordenados y duplicados.
Acudimos a los comandos de Datos:
En primer lugar, seleccionamos la columna A y pedimos Quitar duplicados.
Nos indicará que se han quitado miles de duplicados, y
quedará:
Ahora solo queda ordenar:
Así ya lo hemos conseguido, pudiendo comprobar que coincide
con el listado anterior.
Si para un número mayor de términos viéramos que falta
alguno, bastaría subir el tope de 40 en la macro.
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,…
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...
Se ha usado el código
ok(n) =
{my(i=1,a=0,m=0,j);if(n%6==0,while(a<=n,j=1;while(j<i,a=3*i*j*(i-j);if(a==n&&j>=i-j,m+=1);j+=1);i+=1));
m>1}
{for(p=1,30000,if(ok(p),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.
No hay comentarios:
Publicar un comentario