jueves, 21 de mayo de 2020

Bases de cubos con suma cero



 Otra entrada más que se basa en mis cálculos en Twitter (@connumeros). El día 22/3/2020 publiqué:

22320 se puede representar mediante dos sumas de cubos cuyas bases suman 0:

22320=(-16)^3+(-15)^3+31^3, con 31+(-15)+(-16)=0

22320 =(-60)^3+(-2)^3+62^3 y 62+(-2)+(-60)=0

No son muchos relativamente los números que cumplen una propiedad similar. 

Comenzaremos con aquellos que presenten suma de cubos cuyas bases sumen cero al menos una vez. El primero es el 6, que se puede representar como 

6=2^3+(-1)^3+(-1)^3, con 2+(-1)+(-1)=0

Función adecuada

En este blog llevamos tiempo usando funciones para estudiar algunas cuestiones. Es un método bastante flexible y que facilita una traducción entre lenguajes. Después usaremos una rutina para comprobar.

En primer lugar, hay que destacar que esta condición se puede simplificar. En lugar de usar la igualdad N=p3-q3-r3, dado que p=q+r, podemos representar r como p-q. Según esto, la condición sería N=p3-q3-(p-q)3.

Si partimos de esa igualdad, desarrollando, N=p3-q3-(p3-3p2q+3pq2-q3)=3p2q-3pq2=3pq(p-q).

Esta expresión 3pq(p-q) nos servirá para construir una parada en la búsqueda, exigiendo que 3pq(p-q)<=N y también para sustituir a N=p3-q3-r3. Es más rápido así. También nos indica que N ha de ser múltiplo de 6, ya que pq(p-q) es siempre par.

Versión para Excel

La siguiente función actúa sobre un número natural y devuelve una cadena de texto, que puede estar vacía o contener la primera solución que se encuentre. Este es su listado:

Function cubossum(n)
Dim i, j, a
Dim es
Dim s$

If n Mod 6 <> 0 Then cubossum = "": Exit Function ‘Da salida si no es múltiplo de 6
es = False ‘Parará el proceso si se encuentra solución
i = 1  ‘Contador para la variable p
s = ""  ‘Cadena de texto para el resultado
a = 0 ‘Contendrá la suma de cubos
While a <= n And Not es ‘Se para si se llega a n o se encuentra una suma
j = 1 ‘Contador de la variable q
While j < i And Not es
a = 3 * i * j * (i - j) ‘Expresión buscada
If a = n Then es = True: s = s + Str$(j) + Str$(i) ‘Se encuentra solución
j = j + 1
Wend
i = i + 1
Wend
cubossum = s
End Function

Con esta función podemos organizar una búsqueda de aquellos números que presentan la descomposición buscada. Los primeros son:


Cada número encontrado viene acompañado del valor de q y el de p. Así, para 210, q=2 p=7, luego 210 = 73-23-(7-2)3 = 73-23-53 = 343-8-125 = 210

Un listado más completo es

6, 18, 36, 48, 60, 90, 126, 144, 162, 168, 210, 216, 252, 270, 288, 330, 360, 378, 384, 396, 468, 480, 486, 540, 546, 594, 630, 720, 750, 792, 816, 858, 918, 924, 972, 990, 1008, 1026, 1140, 1152, 1170, 1260, 1296, 1344, 1386, 1404, 1518, 1530, 1560, 1620, 1638, 1656, 1680, 1728, 1800…

Rutina de comprobación

Para comprobar este listado podemos usar técnicas de Excel, ya que permite la creación de listas usando sus flas o columnas. Lo podemos efectuar en tres fases:

1.      Se recorren todos los valores posibles de p3-q3-(p-q)3 hasta cierto tope.
2.      Se vuelcan todos en la columna A. Aparecerán desordenados y repetidos
3.      Se usan los comandos del apartado Datos para ordenar y eliminar duplicados.

En la primera fase usaremos una macro en lugar de una función, para que se puedan situar las soluciones en la columna A. Hemos usado esta:

Sub cuboss()
Dim i, j, k, v


k = 0 ‘Esta variable representa la fila en la que se va a escribir
For i = 1 To 40  ‘Con dos bucles completos se recorren las sumas tipo p3-q3-(p-q)3
For j = 1 To i - 1
k = k + 1 ‘Se incrementa la fila, para escribir en columna
v = i ^ 3 - j ^ 3 - (i - j) ^ 3 ‘Expresión buscada
ActiveWorkbook.Sheets(1).Cells(k, 1).Value = v ‘Se añade a la columna A
Next j
Next i
End Sub

Hemos elegido un tope de 40 en la búsqueda. Para casos sencillos parece excesivo.

Se volcarán los resultados de esta forma:



Tal como esperábamos, aparecen desordenados y duplicados.

Acudimos a los comandos de Datos:



En primer lugar, seleccionamos la columna A y pedimos Quitar duplicados.

Nos indicará que se han quitado miles de duplicados, y quedará:


Ahora solo queda ordenar:



Así ya lo hemos conseguido, pudiendo comprobar que coincide con el listado anterior.



Si para un número mayor de términos viéramos que falta alguno, bastaría subir el tope de 40 en la macro.

Todo esto se puede traducir al lenguaje PARI:

ok(n) = {my(i=1,a=0,m=0,j);if(n%6==0,while(a<=n&&m==0,j=1;while(j<i&&m==0,a=3*i*j*(i-j);if(a==n,m=1);j+=1);i+=1)); m}
{for(p=1,2000,if(ok(p),print1(p,", ")))}

Si lo pruebas en https://pari.math.u-bordeaux.fr/gp.html obtendrás la lista de los primeros números que cumplen esta descomposición:

6, 18, 36, 48, 60, 90, 126, 144, 162, 168, 210, 216, 252, 270, 288, 330, 360, 378, 384, 396, 468, 480, 486, 540, 546, 594, 630, 720, 750, 792, 816, 858, 918, 924, 972, 990, 1008, 1026, 1140, 1152, 1170, 1260, 1296, 1344, 1386, 1404, 1518, 1530, 1560, 1620, 1638, 1656, 1680, 1728, 1800,…

Resultados múltiples

Algunos de estos números presentan varias descomposiciones. El primero es 90, que admite las dos sumas 90=5^3-3^3-2^3 y 90=6^3-5^3-1^3. Después le siguen estos:


Si adaptamos a PARI obtenemos un listado más extenso:

90, 630, 720, 1170, 1260, 1386, 2430, 2640, 3024, 3060, 3168, 3366, 3570, 4446, 5040, 5760, 5940, 6210, 6300, 6930, 8910, 9360, 10080, 11088, 11250, 12480, 12870, 12960, 14490, 14742, 16380, 17010, 18018, 18270, 18810, 19440, 19890, 21120, 22140, 22320, 23310, 24192, 24480, 24570, 25344, 25740, 26928, 27360, 27720, 28560, 29700...

Se ha usado el código

ok(n) = {my(i=1,a=0,m=0,j);if(n%6==0,while(a<=n,j=1;while(j<i,a=3*i*j*(i-j);if(a==n&&j>=i-j,m+=1);j+=1);i+=1)); m>1}
{for(p=1,30000,if(ok(p),print1(p,", ")))}

Destaca el 720 con tres descomposiciones:

720=10^3-6^3-4^3=12^3-10^3-2^3=16^3-15^3-1^3

El primero con 4 es 19440: 19440=30^3+(-18)^3+(-12)^3=36^3+(-30)^3+(-6)^3=48^3+(-45)^3+(-3)^3=81^3+(-80)^3+(-1)^3

Con cinco hemos obtenido el 55440, equivale a estas sumas:   
    
55440=42^3+(-22)^3+(-20)^3=44^3+(-30)^3+(-14)^3=55^3+(-48)^3+(-7)^3=70^3+(-66)^3+(-4)^3=80^3+(-77)^3+(-3)^3

Lo dejamos aquí, porque nuestros instrumentos de cálculo se ralentizan con números grandes.

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

martes, 28 de abril de 2020

Sumas de Goldbach, Lemoine y otras (2)



Se estudiaron en la entrada anterior las sumas de Lemoine, en las que los números impares superiores a 5 se descomponen como p+2q, siendo p y q primos. Si 2q lo sustituimos por q-1+q+1, podremos preguntarnos por la posibilidad de que q-1 y q+1 sean los primos (en este caso gemelos), en lugar de q. Es prácticamente el mismo problema, pero más exigente. Existen más números dobles de primos que parejas de primos gemelos. Para estudiar estas sumas bastará modificar ligeramente la función que usamos para las sumas de Lemoine (ver la entrada anterior), pero modificando alguna de las líneas del código. Puede ser esta:

Function sumlemoine00(n)
Dim i, j, m
Dim s$

s = ""
If n Mod 2 = 0 Then sumlemoine00 = "NO": Exit Function
m = 0
i = 2
While m = 0 And i <= n - 8
If esprimo(i) Then
j = (n - i) / 2   ‘Al llegar aquí, se busca un par de primos gemelos
If esprimo(j + 1) And esprimo(j - 1) Then m = m + 1: s$ = s$ + "#" + Str$(i) + "+" + Str$(j - 1) + "+" + Str$(j + 1)
End If  ‘El resto del código es muy similar al de las sumas de Lemoine
i = i + 1
Wend
If s = "" Then s = "NO" Else s = Str$(m) + "--" + s
sumlemoine00 = s
End Function

Al aplicar esta función a los primeros impares, no todos presentan una suma de un número primo con un par de primos gemelos:
3          NO
5          NO
7          NO
9          NO
11        1--# 3+ 3+ 5
13        1--# 5+ 3+ 5
15        1--# 3+ 5+ 7
17        1--# 5+ 5+ 7
19        1--# 7+ 5+ 7
21        1--# 13+ 3+ 5
23        1--# 11+ 5+ 7
25        1--# 13+ 5+ 7
27        1--# 3+ 11+ 13
29        1--# 5+ 11+ 13
31        1--# 7+ 11+ 13
33        NO
35        1--# 11+ 11+ 13
37        1--# 13+ 11+ 13
39        1--# 3+ 17+ 19
41        1--# 5+ 17+ 19
43        1--# 7+ 17+ 19
45        1--# 37+ 3+ 5
47        1--# 11+ 17+ 19
49        1--# 13+ 17+ 19
51        1--# 43+ 3+ 5
53        1--# 17+ 17+ 19
55        1--# 19+ 17+ 19
57        NO
59        1--# 23+ 17+ 19
61        1--# 37+ 11+ 13

Vemos que los de una cifra, el 33 y el 57 no admiten ese tipo de suma. De hecho, la gran mayoría de los impares admite la suma p+q+r con p primo y (q,r) par de primos gemelos.

No es fácil encontrar todos los números que no admiten esas sumas. Los primeros son estos:

1, 3, 5, 7, 9, 33, 57, 93, 99, 129, 141, 153, 177, 183, 195, 213, 225, 243, 255, 261, 267, 273, 297, 309, 327, 333, 351, 369, 393, 411, 423, 435, 453, 477, 489, 501, 513, 519, 525, 537, 561, 573, 591, 597, 603, 633, 645, 657, 663, 675, 687, 693, 705, 711, 723, 729, 753, 771, 783, 789, 801, 807, 813, 825,…

Estaban inéditos y los hemos publicado en


Para encontrarlos hemos usado el siguiente código PARI:

for(n = 0, 500, m = 2*n+1; v = 0; forprime(i = 3, m-8, j = (m-i)/2; if(isprime(j-1) && isprime(j+1), v = 1)); if(v == 0, print1(m,", ")))

En él recorremos los impares (m=2*n+1) y después los primos. Para cada primo analizamos si existe un par de primos gemelos en la suma. La variable v recoge el éxito (v=1) o el fracaso (v=0) en la búsqueda. Al final se imprimen los números en los que v=0.

Estudio de un número concreto con CARTESIUS

Con un planteo similar al del anterior tema, podemos encontrar fácilmente las descomposiciones del tipo que estudiamos para un número concreto. Por ejemplo, 61 hemos visto que admite 37+11+13.

Usamos ahora

xtotal=2
xt=1..59
xt=filtro(primo)
ES PRIMO(x1+2)
ES x1+x1+2+x2=61

(La condición ES PRIMO no está implementada en el archivo descargable)

Exigimos que x1+2 sea primo (gemelo con x1), y el resto queda casi igual que en el anterior:
Obtenemos:
  


Así que aparece otra solución: 3+5+53=61

Si el número no es muy grande, se puede descomponer con este método. En la imagen vemos las descomposiciones de 121:


En las cinco soluciones los dos primeros sumandos son primos gemelos.

Pares de primos de Sophie Germain

Por último, podemos exigir que dos de los tres primos de la suma sean un par de Sophie Germain, es decir, que sea primo p y también 2p+1, dejando libre el tercer sumando.

En este caso, están bastante equilibrados el conjunto de los que admiten esta descomposición y los que no:

Los primeros que sí la admiten son estos:

9, 10, 12, 13, 14, 15, 17, 18, 19, 20, 21, 23, 24, 26, 27, 29, 30, 33, 35, 36, 37, 38, 39, 41, 44, 45, 47, 48, 50, 51, 53, 54, 57, 59, 60, 63, 65, 66, 68, 69, 71, 72, 73, 74, 75, 77, 78, 80, 81, 83, 86, 87,…

Por ejemplo, 87 se puede descomponer como:

87=5+11+71=11+23+53=23+47+17

En las tres sumas los dos primeros sumandos son pares de primos de Sofhie Germain.

Los hemos conseguido con Cartesius:

xtotal=2
xt=1..87
xt=filtro(primo)
es primo(2*x1+1)
es x1+2*x1+1+x2=87

Los primeros que no admiten ese tipo de suma son:

1, 2, 3, 4, 5, 6, 7, 8, 11, 16, 22, 25, 28, 31, 32, 34, 40, 42, 43, 46, 49, 52, 55, 56, 58, 61, 62, 64, 67, 70, 76, 79, 82, 84, 85, 88,…

Por ejemplo, estas son las descomposiciones en tres primos del número 43:

3             3             37
3             11          29
3             17          23
5             7             31
5             19          19
7             7             29
7             13          23
7             17          19
11          13          19
13          13          17

En ninguna de ellas aparece una par de primos de Sophie Germain.
Se pueden idear otros condicionamientos con las sumas de Goldbach, pero a ninguna le hemos visto interés. Intenta, por ejemplo, sumas en las que los tres primos formen una progresión aritmética, y llegarás a una trivialidad, y es que coinciden con los triples de los números primos.

martes, 21 de abril de 2020

Sumas de Goldbach, Lemoine y otras (1)



La conjetura de Lemoine afirma que todo número impar mayor que 5 se puede expresar como la suma p+2q, donde p y q son números primos. Se ha comprobado para N<10^13, y no se ha demostrado cuando escribo esto.

Esta conjetura es más fuerte que la segunda de Goldbach, que afirma que todo número impar mayor que 5 puede expresarse como suma de tres números primos. Aquí no se exige que dos de los primos sean iguales.

Estas dos conjeturas admiten ampliaciones y variantes. Por ejemplo, podemos exigir que dos de los primos sean gemelos, o bien otras más complicadas que podremos tratar si no se alargan las primeras.

En esta entrada estudiaremos las soluciones que presenta cada número impar en estas dos conjeturas.

Sumas de Lemoine

Usaremos una función que cuente o presente todas las sumas del tipo p+2q previstas en la conjetura para un número dado. Comenzaremos presentando las sumas además de contarlas. Para ello usaremos la función:

Function sumlemoine(n)
Dim i, j, m
Dim s$

If n Mod 2 = 0 Then sumlemoine = "NO": Exit Function ‘Si n es par, salimos
m = 0 ‘Contador de soluciones
For i = 2 To n - 4
If esprimo(i) Then ‘Se recorren los primos
j = (n - i) / 2 ‘Se analiza la posible solución para el segundo primo
If esprimo(j) Then m = m + 1: s$ = s$ + "#" + Str$(i) + "+2 *" + Str$(j)
‘Si ambos son primos, se incrementa el contador m y se presentan las sumas
End If
Next i
s = Str$(m) + "--" + s
sumlemoine = s
End Function

Con esta función podemos recorrer un conjunto de números impares y comprobar que todos presentan soluciones del tipo N=p+2q. En la tabla figuran los siguientes a 50


En los valores de la función se lee, en primer lugar, el número de soluciones. Así, vemos que 55 presenta 3 y 57, 7. A continuación se escriben las sumas posibles:
55=17+2*19=29+2*13+41+2*7

Este formato es muy ilustrativo, pero en las estadísticas que vamos a estudiar, es un estorbo. Por eso, iremos modificando el resultado, que una vez será el número de soluciones y, en otras ocasiones, máximo, mínimos o diferencias. Sobre la marcha se irá decidiendo.

Número de sumas de Lemoine

Podemos eliminar en la anterior función toda referencia a la cadena de texto s$ y dejar que devuelva solo el número de soluciones. La tabla anterior quedaría así:


De esta forma simplificada se puede crear una lista con los valores en los primeros números impares:


Estos valores ya están publicados en http://oeis.org/A046927

A046927                            Number of ways to express 2n+1 as p+2q where p and q are primes.         
0, 0, 0, 1, 2, 2, 2, 2, 4, 2, 3, 3, 3, 4, 4, 2, 5, 3, 4, 4, 5, 4, 6, 4, 4, 7, 5, 3, 7, 3, 3, 7, 7, 5, 7, 4, 4, 8, 7, 5, 8, 4, 7, 8, 7, 4, 11, 5, 6, 9, 6, 5, 12, 6, 6, 10, 8, 6, 11, 7, 5, 11, 8, 6, 10, 6, 6, 13, 8, 5, 13, 6, 9, 12, 8, 6, 14, 8, 6, 11, 10, 9, 16, 5, 8, 13, 9, 9, 14, 7, 6, 14

Podemos crear un gráfico que compare el valor de cada impar con el número de sumas de Lemoine que presenta:


Observamos que sigue de forma aproximada una tendencia potencial 0,4562x^0,5892, pero con una correlación no muy fuerte, de R2=0,7014. Esto nos marca una tendencia al crecimiento atenuado en el número de soluciones.

Exploración con CARTESIUS

La obtención de las diversas sumas es un problema combinatorio, y en este tipo de cuestiones puede resultar útil nuestra hoja de cálculo Cartesius


Por ejemplo, por las tablas anteriores sabemos que el número 57 admite siete descomposiciones de Lemoine. Lo comprobamos en Cartesius con este planteo:

xtotal=2
xt=1..55
xt=filtro(primo)
ES 2*x1+x2=57

Podemos traducirlo como que

Se usan dos variables
Ambas variarán entre 1 y 55
Se filtran solo los primos
La suma del doble de la primera con la segunda ha de dar 57

El resultado es el previsto, siete posibilidades:


El primer primo es el que se multiplica por 2. Así, 2*2+53=57, 2*5+47=57,…

Comparación con las sumas de Golbach

Podemos adaptar la función que hemos presentado al recuento de las soluciones para las sumas de Goldbach para impares, formadas por tres números primos. Tal como se afirmó en los primeros párrafos, se obtendrán valores mayores que en los obtenidos a partir de la conjetura de Lemoine.

Se puede usar la siguiente función:

Function sumgoldbach(n)
Dim i, j, m

If n Mod 2 = 0 Then sumgoldbach = 0: Exit Function
m = 0
For i = 2 To n - 4
If esprimo(i) Then
j = 2
While j <= i And j <= n - i
If esprimo(j) And esprimo(n - i - j) And j >= n - i - j Then m = m + 1
j = j + 1
Wend
End If
Next i
sumgoldbach = m
End Function

Con ella podemos contar el número de sumas de Goldbach para cada número impar. Están ya publicadas en http://oeis.org/A054860

A054860                            Number of ways of writing 2n+1 as p + q + r where p, q, r are primes with p <= q <= r.                 
0, 0, 0, 1, 2, 2, 2, 3, 4, 3, 5, 5, 5, 7, 7, 6, 9, 8, 9, 10, 11, 10, 12, 13, 12, 15, 16, 14, 17, 16, 16, 19, 21, 20, 20, 22, 21, 22, 28, 24, 25, 29, 27, 29, 33, 29, 33, 35, 34, 30, 38, 36, 35, 43, 38, 37, 47, 42, 43, 50, 46, 47, 53, 50, 45, 57, 54, 47, 62, 53, 49, 65, 59, 55,…

Evidentemente, el número de sumas de Lemoine es inferior al de las de Goldbach. En esta gráfica hemos hecho coincidir ambas:


La línea azul sigue las sumas de Goldbach y la roja las de Lemoine. Se observa cómo se ampliando la diferencia entre ellas al crecer los números impares. De hecho, esta es la gráfica de los cocientes de ambas sumas:


En las oscilaciones influyen más las sumas de Goldbach, que son más irregulares en su crecimiento.


martes, 14 de abril de 2020

Productos cíclicos con números primos:


Hace unos meses se estudió en este blog el tipo de expresión N=a*b + b*c + c*a, a la que llamamos “productos cíclicos”. Puedes leerla en


En esa entrada se estudió la unicidad de esta representación para algunos números y aquellos otros que no la admiten para ningún valor. Llegamos a algunas sucesiones finitas ya publicadas. En esta de hoy nos limitaremos al uso de tres números primos distintos.

De entrada se puede razonar que todos los números que consideraremos serán impares, ya que si en a*b + b*c + c*a, a, b y c son primos, puede ocurrir que uno de ellos sea 2, con lo que se sumarán dos productos pares y uno impar, y si ninguno es igual a 2, los tres sumandos serán impares, y también la suma lo será.

En las búsquedas previas que hemos emprendido se ha visto que existen muchos casos distintos en unicidad y número de soluciones. Por ello diseñaremos una función similar a la usada en la entrada enlazada, Function prodciclo$(n), pero que solo admita factores primos distintos y que devuelva los ciclos encontrados y el número de ellos. De esta forma podremos establecer las búsquedas que deseemos. La denominaremos prodcicloprim$. Su esquema es parecido a la anterior, ya que recorremos todos los primos posibles, y de cada par calculamos el tercero a partir de N. Si resulta ser entero, primo y menor que los otros dos, ya hemos encontrado los tres primos buscados. En ese caso se recoge el resultado y se van contando las soluciones, Su algoritmo en VBasic de Excel puede ser:

Public Function prodcicloprim$(n)
Dim s$
Dim i, j, k, m

s$ = "": m = 0   s$ recogerá resultados y m los contará
For i = 2 To (n - 2) / 2 ‘Primer primo
If esprimo(i) Then
j = 2
While j < i And j < n / i ‘Segundo primo
If esprimo(j) Then
k = (n - i * j) / (i + j) ‘Tercer posible primo
‘Si k cumple los requisitos, lo incorporamos a la solución e incrementamos el contador m
If k = Int(k) And k < j And esprimo(k) Then m = m + 1: s$ = s$ + " -- " + Str$(i) + Str$(j) + Str$(k) + "  "
End If
j = j + 1
Wend
End If
Next i
If s$ <> "" Then prodcicloprim = Str$(m) + " " + s$ Else prodcicloprim = "NO"
End Function

Con esta función podremos buscar los números que permiten esta descomposición. Bastará que la misma no devuelva “NO”. También podremos contar soluciones, ya que la respuesta comienza con ese número. Por ejemplo:

prodcicloprim(191)= 4  --  13 7 5   --  13 11 2   --  17 7 3   --  37 3 2 

Esta respuesta nos indica que existen 4 soluciones, que son

191=13*7+7*5+5*13
191=13*11+11*2+2*13
191=17*7+7*3+3*17
191=37*3+3*2+2*37

Con un poco de experiencia en búsquedas se le puede sacar mucho partido a esta respuesta. Según las necesidades, podemos alterar el código para que solo nos devuelva el número de soluciones, o solo estas. Ya dependerá de nuestros intereses. Por ejemplo, el día 10/01/20 publiqué en Twitter que 311 es el primer número que admite ocho descomposiciones de este tipo:

311 es el menor número que es igual a ocho expresiones de la forma pq+qr+rp, con p, q y r primos distintos:

311=13×11+11×7+7×13
311=17×13+13×3+3×17
311=19×13+13×2+2×19
311=23×7+7×5+5×23
311=29×7+7×3+3×29
311=37×5+5×3+3×37
311=43×5+5×2+2×43
311=61×3+3×2+2×61

Con esta función emprenderemos las búsquedas que deseemos:

Números que admiten al menos una representación de este tipo

Exigimos que prodcicloprim sea distinta de “NO”:

Nos resulta una sucesión que ya está publicada:



En la tabla figuran los primeros números que admiten la expresión y junto a ellos el número de soluciones y los primos correspondientes. Vemos números con una, dos o tres representaciones. En cuanto se avanza algo más aparecen más casos múltiples, como el citado 311.

Puedes consultar http://oeis.org/A238397

Números que no admiten esta descomposición

Si buscamos los números en los que el resultado es “NO” obtendremos la lista de los que no se pueden descomponer de esta forma. Sería la complementaria de la anterior. Podríamos rotular estos números como de categoría 0, ya que no admiten ninguna representación cíclica de tres primos, y a los demás les podemos asignar la categoría según el número de representaciones. Así tendríamos estas categorías:

Categoría 0: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, (faltaría el 31) 32, 33,…

Categoría 1: 31, 41, 59, 61, 87, 91, 103, 113, 119, 121, 129, 143, 161, 171, …

Categoría 2: 71, 101, 131, 211, 221, 269, 271, 343, 359, 391, 401, 423, 437, 439, 451, 471,…

Los primeros números del resto de categorías son:

3        151
4        191
5        491
6        671
7        887
8        311
9        1151

Para la categoría 10 no existe ningún caso inferior a 25000.