Mostrando entradas con la etiqueta Sumas de cuadrados. Mostrar todas las entradas
Mostrando entradas con la etiqueta Sumas de cuadrados. Mostrar todas las entradas

jueves, 12 de marzo de 2026

Números que son promedio de dos cuadrados

Hace años que vengo publicando estudios y búsquedas en las que es necesario descomponer un número en dos cuadrados. Desde Fermat conocemos la condición de que un número primo deba ser para ello del tipo 4k+1, ya que los contrarios, de forma 4k+3 no admiten esta descomposición.

Gauss estudió el tema y aportó una fórmula para conocer en cuántas sumas de cuadrados se descompondría un número concreto, y que resultó depender del número de factores primos de un tipo y otro que figuraran en la descomposición.

Puedes consultar esa fórmula, por ejemplo, en

https://hojaynumeros.blogspot.com/2024/03/potencias-equidistantes-de-cuadrados.html.

En ella el factor 2 en un número no influye en el número de descomposiciones esperadas, sino de los tipos 4k+1 y 4k+3 presentes.

Lo que explico en el párrafo anterior nos hace ver que si N se descompone en dos cuadrados, también lo hará 2N, ya que la presencia del 2 no influye en el resultado. Por ejemplo:

850=2*52*17=32+292=112+272=152+252

Si lo multiplicamos por 2, deberían aparecer también tres sumas de cuadrados, y así es:

1700=22*52*17=102+402=162+382=262+322

Si ahora divido las igualdades correspondientes a 2N entre 2, resultarán las formas de expresar N en promedios de dos cuadrados:

850=(102+402)/2=(162+382)/2=(262+322)/2

En realidad, estamos ante una situación algebraica, ya que si N=a2+b2, se tendrá que (a+b)2+(a-b)2=2(a2+b2)=2N

En efecto: 13+25=40, 25-15=10, que son las primeras soluciones para el promedio, 27-11=16 y 27+11=38, las segundas, y, por último, 29-3=26, 29+3=32.

Estos razonamientos sugieren que basta descomponer 2N en dos cuadrados para que aparezca una solución de promedios para N y que el número de soluciones será el mismo. No es difícil encontrar una función que realice este trabajo. Otra orientación es la de buscar todos los cuadrados C menores que N y ver si N+C es cuadrado. No se tienen en cuenta los promedios en los que los dos sumandos son iguales, lo que se considera solución trivial.

Como aquí se trata de comprender y practicar, copio las dos posibilidades:

Buscar si N+C es cuadrado:

Function entredos$(n)

Dim i, r, a, b, m

Dim s$

 

s = "" 'La solución se expresa como texto

m = 0 ‘Contador de soluciones

r = Int(Sqr(n)) 'Primer valor a ensayar

i = r - 1

While i > 0  'Descendemos valores de cuadrados

b = n - i ^ 2 'Diferencia entre potencia y cuadrado

a = n + b 'A la potencia le sumamos la diferencia

If escuad(a) Then m = m + 1: b = Sqr(a): s = s + " = (" + ajusta(i) + "^2+" + ajusta(b) + "^2)/2" ‘Si es cuadrado, hay una solución nueva

i = i - 1

Wend

If s = "" Then s = "NO" Else s = ajusta(m) + " : " + s

entredos = s 'Si no hay solución, la respuesta es “NO”

End Function

 

Descomponer 2N en suma de dos cuadrados

Public Function entredos2(n) As String

Dim x, p, m, c

Dim s$

 

s$ = "": m = 0’ Contenedor y contador

For x = 1 To Sqr(2 * n - 1)

c = x * x ‘Primer cuadrado para 2N

p = 2 * n – c ‘Posible segundo cuadrado

If escuad(p) And p <= c Then

s$ = s$ + "=(" + ajusta$(x) + "^2+" + ajusta$(Sqr(p)) + "^2)/2": m = m + 1 ‘Hay solución y avanza el contador

End If

Next x

If s$ = "" Then s$ = "NO" Else s$ = ajusta(m) + "::" + s$

entredos2 = s$ ‘Presentación de resultados

End Function

 

En la siguiente tabla se puede observar la concordancia entre los dos métodos, en un rango elegido al azar:


Evidentemente, faltan aquellos números que no admiten descomposición, por contener factores primos del tipo 4k+3 elevado a exponente impar. Son ejemplos 135=33*5, 151, primo tipo 4k+3, o 144=24*32, en el que, al ser cuadrado presentaría la solución trivial

 (122+122)/2.

 Los primeros números que admiten ser iguales a un promedio de cuadrados son:

5, 10, 13, 17, 20, 25, 26, 29, 34, 37, 40, 41, 45, 50, 52, 53, 58, 61, 65, 68, 73, 74, 80, 82, 85, 89, 90, 97, 100, 101, 104, 106, 109, 113, 116, 117, 122, 125, 130, 136, 137, 145, 146, 148, 149, 153, 157, 160, 164, 169, 170, 173, 178, 180, 181, 185, 193, 194, 197, 200, …

Con otra definición equivalente están publicados en https://oeis.org/A004431, y en un comentario aparece el promedio de dos cuadrados. Son interesantes los comentarios y alguna programación en PARI.

 

Diferencias prefijadas

Las diferencias entre las bases de los cuadrados que sean solución, han de ser pares, para que su suma sea par, ya que su resultado es 2N.

Podemos seleccionar entre las soluciones aquellas que posean una diferencia determinada, a la que llamaremos 2D por ser par. Conociendo ese dato, es fácil dar un criterio para saber si N admite ser promedio de dos cuadrados cuyas bases se diferencien en 2D. Comenzaríamos así:

Sería k2+(k+2d)2=2N

2k2+4dk+4d2=2N

k2+2dk+2d2=N, es decir, la ecuación de segundo grado en k:  k2+2dk+(2d2-N)=0

En la página enlazada se sirven de esta fórmula para definir estos números.

Para que exista solución entera, el discriminante d2-2d2+N=N-d2 deberá ser cuadrado. Ese sería el criterio.

Un número N admitirá ser promedio de dos cuadrados diferenciados en 2d si N-d2 es cuadrado

Por ejemplo, en la tabla se observa que 130 admite las diferencias 6 y 14, y esto es porque 130-32=121, cuadrado de 11, y 130-72=81, cuadrado de 9. Implemento en un buscador, con un rango similar y obtengo: 113, 130, 149, 170, 193, …Los números 130 y 149 son los que presentan diferencia 14 en la tabla.

 

La expresión N=k2+2dk+2d2 nos permite encontrar las mismas soluciones para números que sean promedio de dos cuadrados. Basta plantear un doble bucle con k y d. Esta es la versión en PARI:

for(n=1,10,for(m=1,10,p=n^2+2*m*n+2*m^2;print1(p,", ")))

Si la ejecuto en la página oficial de PARI/GP obtengo la solución

5, 13, 25, 41, 61, 85, 113, 145, 181, 221, 10, 20, 34, 52, 74, 100, 130, 164, 202, 244, 17, 29, 45, 65, 89, 117, 149, 185, 225, 269, 26, 40, 58, 80, 106, 136, 170, 208, 250, 296, 37, 53, 73, 97, 125, 157, 193, 233, 277, 325, 50, 68, 90, 116, 146, 180, 218, 260, 306, 356, 65, 85, 109, 137, 169, 205, 245, 289, 337, 389, 82, 104, 130, 160, 194, 232, 274, 320, 370, 424, 101, 125, 153, 185, 221, 261, 305, 353, 405, 461, 122, 148, 178, 212, 250, 292, 338, 388, 442, 500, …

Como era de esperar, aparecen las soluciones desordenadas. Si las ordeno en una hoja de cálculo, coinciden con las obtenidas por otros procedimientos.

5, 10, 13, 17, 20, 25, 26, 29, 34, 37, 40, 41, 45, 50, 52, 53, 58, 61, 65, 65, 68, 73, 74, 80, 82, 85, 85, 89, 90, 97, 100, 101, 104, 106, 109, 113, 116, 117, 122, 125, 125, 130, 130, 136, 137, 145, 146, 148, 149, …

Se observan dos hechos, como son la existencia de repetidos, (65 y 85), y también la falta de alguno en el listado, simplemente porque “tarda más en aparecer”. Por eso, prefiero siempre algoritmos que devuelvan las soluciones ordenadas.

lunes, 11 de mayo de 2020

Sumas de cuadrados con el mismo resultado


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