Buenos días a toda la comunidad,
Continuando con mis estudios sobre los números primos he llegado a una parte interesante que me gustaría compartir con ustedes a saber:
Una criba determinista para números de la forma \( p=24k+7 \) y su aplicación a la búsqueda de exponentes de Mersenne
RESUMEN:
Se describe una criba paramétrica que genera todos los números primos de la forma \( p = 24k+7 \) (\( k \ge 0 \)) sin divisiones trial. El método se basa en cinco ecuaciones paramétricas que representan todas las factorizaciones posibles de un compuesto de esa progresión aritmética. Se implementa en C con OpenMP, obteniendo tiempos muy reducidos (menos de 17 segundos para \( k \le 990.000.000 \)). Como aplicación, se filtran aquellos \( p \) tales que \( p+1 \) es potencia de dos, identificando los exponentes de la cadena de dobles Mersenne. Se presentan resultados empíricos hasta \( p \approx 2.4\times10^{10} \).
1. INTRODUCCIÓN
Los números de Mersenne son \( M_n = 2^n - 1 \). Un exponente \( n \) da un primo de Mersenne si \( M_n \) es primo. Todo primo de Mersenne mayor que 3 cumple \( n \equiv 7 \pmod{24} \). Por tanto, los exponentes candidatos son \( n = 24k + 7 \).
2. FUNDAMENTO TEÓRICO
Sea \( p = 24k+7 \) (impar, no divisible por 3). Cualquier factor \( a \) de \( p \) debe ser coprimo con 24, luego \( a \bmod 24 \in \{1,5,7,11,13,17,19,23\} \).
Si \( p \) es compuesto, \( p = a\cdot b \) con \( a,b > 1 \).
Los residuos de \( a \) y \( b \) multiplicados deben dar \( 7 \pmod{24} \). Las únicas combinaciones son:
\( (1,7), (5,11), (7,1), (11,5), (13,19), (17,23), (19,13), (23,17) \).
Escribiendo \( a = 24k_1 + r_a \), \( b = 24k_2 + r_b \), se obtienen expresiones paramétricas para \( k \). Por ejemplo, para \( (5,11) \):
\( (24k_1+5)(24k_2+11)=24\left(24k_1k_2 + 11k_1 + 5k_2 + 2\right)+7 \).
Los valores de \( k \) que corresponden a números compuestos son aquellos que cumplen alguna de las siguientes ecuaciones (con \( k_1,k_2 \ge 0 \) excepto donde se indica):
(A) \( k = 24k_1k_2 + 11k_1 + 5k_2 + 2 \)
(B) \( k = 24k_1k_2 + 19k_1 + 13k_2 + 10 \)
(C) \( k = 24k_1k_2 + 23k_1 + 17k_2 + 16 \)
(D) \( k = 24k_1k_2 + 7k_1 + k_2 \), con \( k_1 \ge 1 \), \( k_2 \ge 0 \)
(E) \( k = 24k_1k_2 + k_1 + 7k_2 \), con \( k_2 \ge 1 \), \( k_1 \ge 0 \)
La ecuación (E) es redundante con (D) por simetría. Marcando todos los \( k \) que cumplen alguna, los restantes son aquellos para los que \( p = 24k+7 \) es primo.
3. ALGORITMO Y OPTIMIZACIONES
Se implementa una criba booleana para \( k \) desde 0 hasta un límite \( K_{\max} \). Para cada \( k_1 \) se recorre la progresión aritmética correspondiente y se marca el array. Pseudocódigo para (A):
for (k1 = 0; ; k1++) {
start = 11*k1 + 2;
if (start > Kmax) break;
step = 24*k1 + 5;
for (k = start; k <= Kmax; k += step)
compuesto[k] = 1;
}
El algoritmo se paraleliza con OpenMP (4 hilos). Se usa un array de bytes. Tras la criba, se recorren los \( k \) no marcados, se calcula \( p = 24k+7 \) y se comprueba si \( p+1 \) es potencia de dos (operación de bits). De ser así, \( p \) es un exponente de doble Mersenne.
4. RESULTADOS EMPÍRICOS
El programa se ejecutó en un portátil Intel con 4 hilos. Los tiempos y resultados se resumen a continuación:
- \( K_{\max}=1.000.000 \) → \( p_{\max}=24.000.007 \), tiempo 0.13 s, primos encontrados 188.491
- \( K_{\max}=20.000.000 \) → \( p_{\max}=480.000.007 \), tiempo 3.05 s, primos 3.169.767
- \( K_{\max}=90.000.000 \) → \( p_{\max}=2.160.000.007 \), tiempo 1.23 s, primos 13.210.775
- \( K_{\max}=990.000.000 \) → \( p_{\max}\approx 23.760.000.007 \), tiempo 16.95 s, primos 130.020.221
En todos los casos se identificaron los exponentes de doble Mersenne conocidos:
\( 7,\;31,\;127,\;8191,\;131071,\;524287,\;2147483647 \)
correspondientes a
\( k=0,\;1,\;5,\;341,\;5461,\;21845,\;89478485 \).
5. CONCLUSIONES
Se ha desarrollado una criba al parecer determinista perfecta para la progresión \( 24k+7 \), lineal en \( K_{\max} \) y fácilmente paralelizable. Es ideal para filtrar exponentes candidatos a primos de Mersenne. La comprobación de \( p+1 \) potencia de dos detecta instantáneamente los exponentes de la cadena de dobles Mersenne. El método puede extenderse a otras clases de congruencia (por ejemplo, \( 24k+1 \), \( 24k+5 \), etc.) para cribar todos los primos.
Estas observaciones vienen de otro trabajo que he ido desarrollando que llamo el reloj de Mersenne, como mencione en artículos anteriores todos los primos de Mersenne se alinean en n6, 90 grados, posición \( (0.25,1) \) con la suma de sus estados \( 0,5 \) para cada primo. Se observo que los números primos se establecen en 5 nodos \( 15^\circ \) (50%), \( 60^\circ \) (12,5%), \( 90^\circ \) (12,5%), \( 240^\circ \) (12,5%), \( 270^\circ \) (12,5%). Esto último lo presentare en prúximos días.
Agradeciendo de antemano a los miembros del foro y administradores por el estudio e información que puedan hacer al respecto.
Saludos cordiales
Johnny Guanipa