domingo, 10 de diciembre de 2017

Suma y diferencia de números del mismo tipo (1)


Con triangulares

Hace unos meses publiqué en Twitter esta propiedad del número de fecha 28617. Consistía en que ese número era suma y también diferencia entre dos triangulares.

28617=161*162/2+176*177/2
28617=4772*4773/2-4766*4767/2

Podríamos buscar otros números N que presentaran la misma propiedad. Para ver que un número es suma de triangulares basta un bucle de búsqueda, recordando que los triangulares se generan sumando 1, 2, 3,… al precedente: 1=0+1, 3=1+2, 6=3+3, 10=6+4. Después basta restar N con el triangular dado, y si es también triangular, ya lo hemos encontrado: N sería suma de dos triangulares.

Lo podemos organizar en el Basic de las hojas de cálculo. Definimos una función tipo texto que devuelva “NO” si el número no  es suma de triangulares, o bien los dos sumandos en el caso de que existan. Podría ser esta:

Public Function sumatriang$(n)
Dim x, i
Dim resul$

x = 1: i = 2: resul = "NO" ‘Inicia i, x para que engendren triangulares
While x <= n / 2 And resul = "NO" ‘Busca hasta la mitad de N
If estriangular(n - x) Then ‘Si la diferencia es triangular, lo tenemos
resul = Str$(x) + ", " + Str$(n - x) ‘Se construye el resultado
End If
x = x + i ‘Estas líneas son importantes. Engendran los distintos triangulares
i = i + 1 ‘Así x será siempre triangular
Wend
sumatriang = resul
End Function

La función estriangular tiene este código, que se basa en que ocho triangulares iguales más una unidad equivale a un cuadrado:

Function estriangular(n) As Boolean
Dim a
If escuad(8 * n + 1) Then estriangular = True Else estriangular = False
End Function

Si organizamos un bucle de búsqueda con la función sumatriang obtenemos los números que son suma de dos triangulares:


Están contenidos en http://oeis.org/A051533

Un caso interesante es aquel en el que el número dado es también triangular. Los tienes en https://oeis.org/A089982:

6, 21, 36, 55, 66, 91, 120, 136, 171, 210, 231, 276, 351, 378, 406, 496, 561, 666, 703, 741, 820, 861, 946, 990, 1035, 1081, 1176, 1225, 1326, 1378, 1431, 1485, 1540, 1596, 1653,…

Puedes conseguirlos añadiendo la condición de que sea triangular n en la función sumatriang.

Diferencia de triangulares

Esta cuestión es más complicada para organizar un algoritmo, pues no sabemos hasta dónde llegar en la búsqueda del minuendo triangular. Es preferible acudir a esta consideración:

Sean los triangulares p(p+1)/2 y q(q+1)/2. Si su diferencia es N, será p(p+1)/2-q(q+1)/2=N; p^2+p-q^2-q=2N; (p-q)(1+p+q)=2N, luego p-q divide a 2N. Si p-q=1, bastará con que 1+p+q=2N, pero esto se cumple siempre, ya que p y q tienen distinta paridad, luego 1+p+q puede ser par.

Si p=q+1, la cuestión se reduce a (q+1)^2+q+1-q^2-q=2q+1+1=2N; q+1=N y q=N-1.

Así tendremos que N(N+1)/2-(N-1)N/2=N

Todo número natural es diferencia de dos triangulares

La segunda parte de la cuestión ha resultado banal, luego en lugar de buscar suma y diferencia de triangulares, habría bastado con la primera parte, la de la suma, que ya está estudiada.

Pasamos a otro tipo.

Con cuadrados

La cuestión de la descomposición de un número en suma de cuadrados ya está resuelta desde Fermat y Gauss. Lo estudiamos en

http://hojaynumeros.blogspot.com.es/2010/10/en-cuantas-sumas-de-cuadrados-2-de-5.html

El criterio más práctico es: sólo se pueden descomponer en cuadrados los números en los que los factores primos del tipo 4n+3 figuren en su descomposición con exponente par.

No viene mal obtener un listado de esos números. Se puede acudir a la descomposición en factores primos o reproducir para cuadrados la función sumatriang. Lo haremos de esta segunda forma. Basta adaptar esa función para cuadrados. El cambio mayor consiste en que la variable i no crece según los números naturales, sino mediante los impares. Quedaría así la nueva función:

Public Function sumacuadrados$(n)
Dim x, i
Dim resul$

x = 1: i = 3: resul = "NO"
While x <= n / 2 And resul = "NO"
If escuad(n - x) Then
resul = Str$(x) + ", " + Str$(n - x)
End If
x = x + i
i = i + 2
Wend
sumacuadrados = resul
End Function

Con ella obtenemos un listado de los números que se descomponen en dos cuadrados, junto con sus factores primos:


Observamos que los factores primos son del tipo 4k+1 o bien, como en el caso del 18 o el 45, del tipo 4k+3 con exponente par.

Un listado más completo lo puedes estudiar en http://oeis.org/A000404:
2, 5, 8, 10, 13, 17, 18, 20, 25, 26, 29, 32, 34, 37, 40, 41, 45, 50, 52, 53, 58, 61, 65, 68, 72, 73, 74, 80, 82, 85, 89, 90, 97, 98, 100, 101, 104, 106, 109, 113, 116, 117, 122, 125, 128, 130, 136, 137, 145, 146, 148, 149, 153, 157, 160, 162, 164, 169,…

Esto resuelve la primera parte de la cuestión. Pasamos a la diferencia:

Diferencia de cuadrados

Si N=p^2-q^2, tendremos N=(p+q)(p-q), luego p+q y p-q son divisores de N. Si p-q=1, p+q=N, por lo que podemos afirmar (y es bien conocido) que N es impar e igual a la diferencia (K+1)^2-K^2, siendo K=(N-1)/2, o lo que es lo mismo, N=((N+1)/2)2-((N-1)/2)2. Así, por ejemplo, 13=72-62

Si N es par, p-q puede valer 2, con lo que p=q+2 y N=(2q+2)*2, lo que implica que N es múltiplo de 4. También es conocido que los números múltiplos de 2 pero no de 4 no equivalen a una diferencia de cuadrados.

Un estudio completo de la situación  lo tienes en

http://hojaynumeros.blogspot.com.es/2017/01/numero-de-descomposiciones-en.html

Así que en el listado anterior habría que suprimir todos los pares no múltiplos de 4. Con esta operación obtenemos el siguiente listado definitivo de los números que son a la vez suma y diferencia de cuadrados:

5, 8, 13, 17, 20, 25, 29, 32, 37, 40, 41, 45, 52, 53, 61, 65, 68, 72, 73, 80, 85, 89, 97, 100, 101, 104, 109, 113, 116, 117, 125, 128, 136, 137, 145, 148, 149, 153, 157, 160, 164, 169, 173, 180, 181, 185, 193, 197, 200, 205, 208, 212, 221, 225, 229, 232, 233,…

http://oeis.org/A097268

Podríamos completar el algoritmo de la función sumacuadrados, pero es preferible el estudio teórico que hemos desarrollado. Lo dejamos como ejercicio.

No hay comentarios: