jueves, 15 de diciembre de 2022

Pares de números primos con la misma diferencia de cuadrados

En mis cálculos diarios en Twitter (@connumeros) me encontré por casualidad con cuatro primos con diferencias de cuadrados iguales, tanto de consecutivos como si los tomamos de forma alterna. Eran estos:

23, 43, 163 y 167

Sus diferencias de cuadrados iguales son dos:

167^2-163^2=43^2-23^2

167^2-43^2=163^2-23^2

Esto es porque 23^2+167^2=28418=43^2+163^2

Es evidente que la tercera forma de crear diferencias (cuarto con primero y tercero con segundo) no nos devolvería una igualdad.

Es esta una situación que se presta a crear métodos o algoritmos para la búsqueda de nuevos conjuntos de cuatro primos. No tiene más trascendencia el tema, y si no te atraen estas técnicas, no te servirá de mucho esta entrada.

Uso de la hoja “Cartesius”

Lo primero que me planteé ante este ejemplo es la cuestión de si existirían muchos conjuntos similares del mismo tipo. No tenía ninguna opinión previa, por lo que acudí a mi hoja “Cartesius” para ver si había algo útil entre los primeros primos. Es una herramienta lenta, por lo que solo exploré hasta el número 61. Mi gran sorpresa fue que resultaron muchos ejemplos posibles para los primeros primos.

Este fue el resultado:


En las primeras columnas figuran los cuatro primos en orden creciente y en las siguientes los dos tipos de diferencias que resultan ser iguales. Todas son divisibles entre 4, por ser un producto de suma por diferencia entre impares.

Código

Lo que sigue es un poco específico, propio del lenguaje de “Cartesius”, pero creo que merece la pena explicarlo. Estas son las condiciones impuestas a “Cartesius”:

xtotal=4

xt=1..65

xt=filtro(primo)

es (x2^2-x1^2)=(x4^2-x3^2)

es (x1<x2)*((x2<x3)+(x2=x3))*(x3<x4)>0

Las tres primeras se entienden bien: combinaremos cuatro números (xtotal=4) desde 1 hasta 65 (xt=1..65) y exigiremos que sean primos (xt=filtro(primo)). Con estas condiciones se preparan automáticamente los primos que se van a combinar, según vemos en esta imagen:


En total, dieciocho primos, que combinaremos de todas las formas posibles (por eso la herramienta es lenta).

La tercera condición exige la igualdad entre diferencias de cuadrados:

es (x2^2-x1^2)=(x4^2-x3^2)

Exige que sean iguales las diferencias entre consecutivos, lo que garantiza que también sean iguales las diferencias alternadas. La palabra “es” significa que se exige que sea verdadera la expresión que le siga.

es (x1<x2)*((x2<x3)+(x2=x3))*(x3<x4)>0

Esta última condición elimina casos repetidos. Exige que X3 sea menor que X4, X1 menor que X2 y X2 menor o igual que X3.En “Cartesius”, como en otros lenguajes, el producto funciona como la conectiva lógica Y y la suma como la O.

Con este proceso ya tenía la idea de que estos casos abundarían en cualquier rango de números, y, por su naturaleza, que serían infinitos (conjetura). Se observan varios números en la cuarta columna que son cabecera de varios conjuntos, como el 61, que pertenece a varias soluciones.

Otra observación en la tabla es la de que están un poco mezclados los primos de tipo 4K+1 y con los de 4K+3.

Algoritmo en forma de función

Ya que este blog va de números y hoja de cálculo, parece conveniente acudir a esta herramienta general para completar y comprobar lo conseguido con Cartesius. La estructura de la función que presentaremos requiere el uso de cuatro bucles distintos, uno por cada primo al cuadrado, y en este caso serán del tipo WHILE_WEND, pero es fácil comprobar que no ralentizan mucho el proceso.

La función, tipo String o texto, actuará sobre un primo cualquiera (si no es primo, sale del código con la palabra “NO”) y devolverá todos los conjuntos de cuatro primos cuyo primer elementoo es ese número primo. Así se consigue una búsqueda sistemática si se desea.

Usaremos nuestra función PRIMANT, que devuelve el primo anterior a un número, porque la búsqueda de primos será descendente.

Este es el código de la función:

Function dos_dif_cubos(n)

Dim i, j, k, d, d1

Dim s$

If Not esprimo(n) Then dos_dif_cubos = "NO": Exit Function

s = ""

k = n

While k > 2 ‘Segundo primo, porque n es el primero

d = n ^ 2 - k ^ 2 ‘Primera diferencia de cuadrados

j = k

While j > 2 ‘Tercer primo

i = j

While i > 2 ‘Cuarto primo

d1 = j ^ 2 - i ^ 2 ‘Segunda diferencia

If d1 = d And d <> 0 And d1 <> 0 Then s = s + Str$(n) + ", " + Str$(k) + ", " + Str$(j) + ", " + Str$(i) + " # " ‘Se da la igualdad buscada

i = primant(i) ‘Desciende i

Wend

j = primant(j) ‘Desciende j

Wend

k = primant(k) ‘Desciende k

Wend

if s="" then s="NO"

dos_dif_cubos = s

End Function

Devuelve una cadena con todos los conjuntos de cuatro primos que presentan diferencias iguales dos a dos, y cuyo sumando mayor es n2.

Por ejemplo, para el primo 23 obtendríamos:

23,  19,  17,  11 #  23,  17,  17,  7 #

Con ellos podríamos construir estas igualdades entre diferencias de cuadrados:

23^2-19^2=17^2-11^2

23^2-17^2=19^2-11^2

23^2-17^2=17^2-7^2

Con esta función podemos recorrer sistemáticamente cualquier rango de números primos (si alguno no es primo devolverá un “NO”).

Por ejemplo, esta sería la tabla de resultados para los primeros primos. Así que con esta función podemos crear un catálogo sistemático de los posibles conjuntos de cuatro primos con la propiedad buscada.

 


Estas cadenas de conjuntos de cuatro primos para uno dado se pueden conseguir también con Cartesius. Basta adaptar el código de más arriba a un valor concreto, por ejemplo el 61:

xtotal=3

xt=1..61

xt=filtro(primo)

es (x2^2-x1^2)=(61^2-x3^2)

es (x1<x2)*((x2<x3)+(x2=x3))*(x3<61)>0

 


Obtendremos una lista de cinco conjuntos de primos que se completan con el 61:

Esta solución coincide con la de la función dos_dif_cubos:

DOS_DIF_CUBOS(61)= 61,  59,  23,  17 #  61,  59,  19,  11 #  61,  59,  17,  7 #  61,  53,  31,  7 #  61,  47,  41,  13 #                                  

Con esto damos por resuelta la búsqueda. Nos queda un detalle, con el que comenzamos este estudio, y es la procedencia de estas diferencias de dos sumas de cubos con el mismo resultado.

Sumas de cubos equivalentes

Recordamos las frases de inicio de estas búsquedas:

23, 43, 163 y 167

Sus diferencias de cuadrados iguales son dos:

167^2-163^2=43^2-23^2

167^2-43^2=163^2-23^2

Esto es porque 23^2+167^2=28418=43^2+163^2

Si ahora buscáramos todos los números que equivalen al menos a dos sumas de cuadrados de primos, encontraríamos dos igualdades de diferencias del tipo buscado. Usaremos esta descomposición de un número en dos cuadrados de primos que sigue. Es una cadena de texto, y el primer carácter es el número de descomposiciones de ese tipo que presenta. Si no es posible la descomposición devolverá un “NO”.

Public Function sumadoscuad_prim$(n)

Dim i, r, t, w, m

Dim s$

s = "" Variable de respuesta

m = 0 Contador de soluciones

r = Sqr(n) ‘Tope de búsqueda

i = 2

While i < r

t = n - i ^ 2

w = Sqr(t)

If escuad(t) And esprimo(w) And i <= w Then m = m + 1: s = s + " # " + Str$(i) + ", " + Str$(w)

‘Si es cuadrado de un primo se incrementa m y se incorpora a la solución

i = primprox(i)

Wend

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

sumadoscuad_prim = s

End Function

Con esta función se pueden unificar las dos cuestiones, enlazando diferencias y sumas, según vemos en la siguiente tabla, que elige el primo mayor y lo incorpora a una diferencia. Comprende todos los números enteros que equivalen a dos sumas de cuadrados de primos:

 


Tomamos el primo mayor y creamos con él diferencias de cuadrados, que coinciden con los elementos de la izquierda.

 

No hay comentarios: