martes, 19 de diciembre de 2017

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

En la anterior entrada estudiamos los números que son suma y diferencia de otros del mismo tipo, en concreto, triangulares y cuadrados. Estudiaremos en esta los primos y oblongos.

Con primos

Suma de dos primos

Si el número N es par mayor que 2, como sólo estudiaremos números no muy grandes, se cumplirá en él la conjetura de Goldbach y será suma de dos primos. Si es impar, la única solución es que N-2 sea primo. Esos son los dos casos en los que N es suma de dos primos. Podemos resumirlo en una función:

Public Function essumaprimos(n)
If n / 2 = n \ 2 And n > 2 Or esprimo(n - 2) Then essumaprimos = True Else essumaprimos = False
End Function

Con ella obtendríamos el listado contenido en http://oeis.org/A014091

4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 36, 38, 39, 40, 42, 43, 44, 45, 46, 48, 49, 50, 52, 54, 55, 56, 58, 60, 61, 62, 63, 64, 66, 68, 69, 70, 72, 73, 74, 75, 76, 78, 80, 81, 82, 84, 85, 86, 88, 90,…

Diferencia de primos

Se ha conjeturado que todo número par es diferencia entre dos primos, y se cumple para números no muy grandes. Si el número es impar, deberá ser N+2 primo. Así que eliminaremos del listado anterior aquellos impares como el 7 tales que al sumarles dos unidades se obtenga un compuesto.

Quedaría así:

4, 5, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 26, 28, 30, 32, 34, 36, 38, 39, 40, 42, 44, 45, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 69, 70, 72, 74, 76,…

Los únicos impares N del listado son aquellos en los que N-2 y N+2 son ambos primos, como el 69, para el que 67 y 71 son ambos primos.

Observamos que, al final, no supone una gran novedad el hecho de ser suma y también diferencia de dos números del mismo tipo en los casos triangular, cuadrado o primo, que son los más populares. Los demás pueden tener dificultades con la cota del minuendo.

Suma de oblongos 

Recordemos que son oblongos los números doble de un triangular, o que se generan con la expresión N(N+1)

Para desechar casos triviales eliminaremos el cero como oblongo, aunque cumple la definición de ser del tipo n(n+1), ya que 0=0(0+1)

Los primeros números que son suma de dos oblongos mayores que cero son:



En forma de listado:

4, 8, 12, 14, 18, 22, 24, 26, 32, 36, 40, 42, 44, 48, 50, 54, 58, 60, 62, 68, 72, 74, 76, 78, 84, 86, 92, 96, 98, 102, 110, 112, 114, 116, 120, 122, 128, 130, 132, 134, 138, 140, 144, 146, 152, 158, 162, 166, 168, 174, 176, 180, 182, 184, 186, 188, 194, 198, 200, 202, 204, 212, 216, 220, 222, 224, 228, 230, 238, 240,…

Para obtenerlos basta pensar en que un oblongo es el doble de un triangular, luego serán oblongos los números cuya mitad sea triangular. En esa idea se basa la siguiente función:

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

x = 2: i = 4: resul = "NO"
While x <= n / 2 And resul = "NO"
If estriangular((n - x) / 2) Then
resul = Str$(x) + ", " + Str$(n - x)
End If
x = x + i
i = i + 2
Wend
sumaoblongos = resul
End Function

En ella la x y la i crecen como en los cuadrados, salvo que los oblongos comienzan con el 2 y crecen de dos en dos y los cuadrados comienzan en 1. Así, a los oblongos los genera la sucesión de pares y a los cuadrados la de impares.

Con PARI podemos usar este código:

for(t=1, 400, i=2; j=2; e=0; while(2*i<=t&e==0, if(issquare(4*(t-i)+1), e=1; print1(t, ", ")); j+=2; i+=j))

Es interesante considerar el caso en el que N también sea oblongo. Basta elegir en el listado anterior aquellos términos que sean oblongos.

12, 42, 72, 110, 132, 182, 240, 272, 342, 420, 462, 552, 702, 756, 812, 992, 1122, 1332, 1406, 1482, 1640, 1722, 1892, 1980, 2070, 2162, 2352, 2450, 2652, 2756, 2862, 2970, 3080, 3192, 3306, 3422, 3540, 3782, 3906, 4032, 4160, 4422, 4556, 4692, 5112, 5402, 5550, 5700, 5852, 6006, 6162, 6480, 6642, 6972, 7482, 7832, 8010, 8372, 8556, 8742, 8930, 9120, 9312, 9702,


Código PARI 

Puedes obtener el listado con este código, en el que generamos oblongos con k*(k+1) y después el primer sumando oblongo tal como hicimos en sumaoblongos. La prueba para el segundo sumando es que 4*(t-i)+1 sea cuadrado.

for(k=1, 100, t=k*(k+1); i=2; j=2; e=0; while(2*i<=t&e==0, if(issquare(4*(t-i)+1), e=1; print1(t, ", ")); j+=2; i+=j))


Número de sumas de oblongos distintas

Terminamos con unas curiosidades. Podemos evaluar en cuántas sumas distintas de oblongos se puede descomponer un número. Usamos la función


Public Function numsumaoblongos(n)
Dim x, i, s

x = 2: i = 4: s = 0
While x <= n / 2
If estriangular((n - x) / 2) Then s = s + 1
x = x + i
i = i + 2
Wend
numsumaoblongos = s
End Function

Es similar a sumaoblongos, pero cuenta sumas en lugar de presentarlas.

Estos son los que admiten  dos o más sumas:



Estos otros cuatro o más



Comprobamos el 2762 con nuestra hoja Cartesius, descargable desde
http://www.hojamat.es/sindecimales/combinatoria/herramientas/herrcomb.htm#cartesius

Planteamos




Viene a expresar que 2762 se descompone en dos sumandos del tipo n(n+1), ordenados en orden creciente para evitar repeticiones. Resultan seis, como era de esperar:



Diferencia de oblongos

p(p+1)-q(q+1)=N significa que p^2+p-q^2-q=(p-q)(p+q+1)=N
Es fácil ver que este producto es par en todos los casos, y es lógico, por ser diferencia de oblongos. Por tanto, todos los números pares 2k serán diferencia de dos oblongos, que pueden ser (k+1)k y k(k-1), ya que su diferencia sería 2k. Así:
16=9*8-8*7=72-56

Por tanto, también en este caso el tema de la diferencia es trivial.

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.