De nuevo tomamos un tweet de @connumeros para profundizar en
una cuestión.
El día 1/3/2020 publiqué en Twitter lo siguiente:
1320 es suma de
cuadrados pares consecutivos, y también de impares:
Pares: 1320=12^2+14^2+16^2+18^2+20^2=(20×21×22-10×11×12)/6
Impares:
1320=5^2+7^2+9^2+11^2+13^2+15^2+17^2+19^2=(19×20×21-3×4×5)/6
Esto me dio la idea de buscar coincidencias de varias sumas
de cuadrados con un mismo resultado. El problema que nos aparecerá será la
lentitud de los cálculos, pues nos encontraremos con bucles dobles y triples en
los algoritmos de búsqueda. Comenzamos por los más sencillos:
Coincidencias
en las sumas de cuadrados
Dado un número natural cualquiera, nos podemos plantear a
cuantas sumas de cuadrados equivale. Nos podemos basar en la conocida fórmula
de la suma de los primeros cuadrados:
Con esta fórmula, si deseamos encontrar una suma S de cuadrados que comience en p y termine en q, su expresión sería S(p,q)=(q(q+1)(2q+1)-(p-1)p(2p-1))/6
Esta expresión se puede implementar en un algoritmo que
busque los números que presentan más de dos descomposiciones en suma de
cuadrados consecutivos.
Lo presentaremos en PARI:
for(n=1, 25000, m=0; i=1; while(i^2<=n, j=0; while(j<i, if(i*(i +
1)*(2*i + 1) - j*(j + 1)*(2*j + 1) == 6*n, m+=1); j+=1);
i+=1);if(m>1,print1(n,", ")))
En él, para cada n
recorremos los valores de i mientras
i^2>=n. Añadimos otra variable j, que será el inicio de la posible
suma de cuadrados. Usamos la fórmula de más arriba, y si el resultado es n, incrementamos el contador m. Si este pasa de 1, imprimimos.
Prueba este código en https://pari.math.u-bordeaux.fr/gp.html
y obtendrás la siguiente sucesión, que ya está publicada:
A130052 Numbers that are the
sum of one or more consecutive squares in more than one way.
25, 365, 841, 1405,
1730, 2030, 3281, 3655, 3740, 4510, 4705, 4760, 4900, 5244, 5434, 5915, 5929,
7230, 7574, 8415, 8464, 9385, 11055, 11236, 11900, 12325, 12524, 14905, 16745,
17484, 18879, 19005, 19044, 19855, 20449, 20510, 21790, 22806, 23681
Aunque la idea de este algoritmo parece acertada, es más
rápido este otro, que se limita a sumar cuadrados sin ningún uso de fórmulas.
Así que dejamos los dos para comprobar.
ok(n) = {my(i=sqrtint(n), m=0, a);while(i>0&&m<2, a=i^2;
j=i; while(j>0&&a<=n,if(a==n, m+=1); j-=1; a=a+j^2); i-=1);
return(m>1)}
for(p=1, 24000, if(ok(p), print1(p,", ")))
Este programa lo hemos añadido a la sucesión publicada.
Coincidencias
en sumas de cuadrados impares
La fórmula adecuada para sumar números impares consecutivos
es muy parecida a la general:
Aunque es útil en otros estudios, parece, tal como se
comentó más arriba, que la suma directa de cuadrados es más rápida en lenguaje
PARI (y en el VBASIC de Excel) que la suma con esta fórmula. La razón no es que
sea ineficiente, sino que requiere bucles de búsqueda más amplios. La usaremos
para comprobar.
Para VBasic de Excel usaremos la misma función para
cuadrados pares o impares. El listado siguiente sirve para cuadrados impares, y
en una de las líneas añadimos como comentario cómo habría que sustituirla para
que sirviera para cuadrados pares:
Function vsumacuad3$(n) 'Pares o impares
Dim i, j, m, a
Dim s$
s = ""
i = Int(Sqr(n)) ‘Comenzamos con la
posibilidad de un solo cuadrado
If i Mod 2 = 0 Then i = i – 1 ‘Para
adaptar al caso PAR, usar If i Mod 2 = 1 Then i = i – 1
m = 0 ‘Número de soluciones
While i > 0 And m < 2
a = i ^ 2
j = i ‘La variable j recorre los
posibles sumandos cuadrados
While j > 0 And a <= n
If a = n Then m = m + 1: s = s +
"###" + Str$(i) + ", " + Str$(j) ‘Se ha encontrado
una suma
j = j – 2 ‘Tanto j como i bajan de 2 en 2 para mantener la paridad
a = a + j ^ 2
Wend
i = i - 2
Wend
If s = "" Then s = "NO"
Else s = Str$(m) + s ‘Se añade el número de soluciones
vsumacuad3 = s
End Function
Buscar soluciones con esta función es una tarea
bastante lenta. Como se ha querido llegar a un rango de 2 millones en la
búsqueda, ha sido un proceso de muchos minutos. Los primeros números que
presentan dos soluciones con sumas de cuadrados impares son estos:
2890, 7735, 22715, 60655, 70225, 87571, 92225, 93314,
136115, 152354, 155519, 256330, 326434, 475861, 511225, 562475, 636360, 671195,
695419, 733485, 808335, 847760, 876490, 1105819, 1107414, 1225965, 1252216,
1293425, 1373701, 1540081, 1541165, 1627899, 1633069, 1832824, 1848405, 1979649
Por ejemplo, 2890 = 37^2 + 39^2 y también 2890 = 7^2 + 9^2 +
11^2 + 13^2 + 15^2 + 17^2 + 19^2 + 21^2 + 23^2 + 25^2
En el lenguaje PARI puedes probar con la fórmula insertada
en párrafos anteriores, pero descubrirás pronto su lentitud de proceso. Este
sería el código adecuado.
for(n=1, 100000, m=0; i=1; while(i^2<=n, j=1; while(j<i, if(i*(i
+ 1)*(i+2) - j*(j + 1)*(j+2) == 6*n, m+=1); j+=2);
i+=2);if(m>1,print1(n,", ")))
Después de transcurrir algunos minutos, te devolverá las
ocho primeras soluciones: 2890, 7735, 22715, 60655, 70225, 87571, 92225, 93314.
Hay que imaginar lo que tardaría en llegar a 2 millones en la búsqueda.
Es más rápido este otro programa:
ok(n) = {my(i=sqrtint(n), m=0, a); i=i-(i%2==0); m=0;
while(i>0&&m<2, a=i^2; j=i; while(j>0 && a<=n,
if(a==n, m+=1); j-=2; a=a+j^2); i-=2); return(m>1)}
concat([0], select(ok, [1..22000]))
Suma de
cuadrados pares
Las técnicas usadas para los números impares sirven también
para los pares, ya que sus fórmulas son similares. En el listado para impares
en Vbasic ya lo adveríamos:
If i Mod 2 = 0 Then i = i – 1 ‘Para adaptar al caso PAR, usar If i
Mod 2 = 1 Then i = i – 1
Así obtendríamos:
100, 1460, 3364, 5620, 6920, 8120, 13124, 14620, 14960,
18040, 18820, 19040, 19600, 20976, 21736, 23660, 23716, 28920, 30296, 33660,
33856, 37540, 44220, 44944, 47600, 49300, 50096, 59620, 66980, 69936, 75516,
76020, 76176, 79420, 81796, 82040, 87160, 91224, 94724, 99856
Por ejemplo, 1460=26^2+28^2 y también 1460=20^2+22^2+24^2
Versión en PARI
Prueba este código y obtendrás el mismo listado. Lo hemos
organizado sólo hasta 22000 para que no sea tan lento.
ok(n) = {my(i=sqrtint(n), m=0,a,j); i=i-(i%2==1); m=0;
while(i>0&&m<2, a=i^2; j=i; while(j>0 && a<=n,
if(a==n, m+=1); j-=2; a=a+j^2); i-=2); return(m>1)}
concat([0], select(ok, [1..22000]))
Caso de
pares e impares
Llegamos a nuestro objetivo principal, que es buscar
aquellos números, como 1320, que admiten sumas de cuadrados pares y también de
impares.
Para ello, refundiremos los algoritmos en uno: buscaremos
pares e impares por separado y uniremos los resultados mediante una conjunción
lógica. En Excel supone un listado bastante largo. Por ello, damos una idea en
PARI:
Se idea una función (issum) que admita un segundo
parámetro además de n (sea t), tal que si vale 0 sirva para los pares y si es
1, para los impares, o al contrario, porque es indiferente. Después, en la
función Ok refundimos los dos resultados haciendo una conjunción con la
conectiva Y (&& en PARI)
Quedaría así:
issum(n,t)={my(i,j,a,m=0);i=sqrtint(n);if(t==0,if(i%2==0,i-=1),if(i%2==1,i-=1));while(i>0&&m<1,a=i^2;j=i;while(j>0&&a<=n,if(a==n,m+=1);j-=2;a=a+j^2);i-=2);return(m)}
isok(m)=issum(m,0)&&issum(m,1)
for(p=1,20000,if(isok(p),print(p)))
Con estas dos funciones refundidas obtenemos el listado que
pretendíamos. Entre los números encontrados, algunos presentarán soluciones
dobles para pares o para impares, pero eso no nos importa por ahora. Lo dejamos
por si alguien quiere investigar. Chocará con la lentitud de los algoritmos.
Los primeros números con esta propiedad mixta son:
164, 596, 1320, 1736, 3156, 4040, 5204, 9416, 10660, 22096,
27080, 29260, 29584, 40020, 69940, 73140, 79540, 85284, 87636, 112916, 113480,
121996, 137960, 161480, 171940, 176420, 182104, 209924, 214396, 221780, 231760,
260120, 290280,…
Por ejemplo, 1736 equivale a estas dos sumas de cuadrados:
Pares: 1736=22^2+24^2+26^2
Impares: 1736=7^2+9^2+11^2+13^2+15^2+17^2+19^2+21^2
No hay comentarios:
Publicar un comentario