Autor Tema: Calcular siguiente número primo extremadamente fácil

0 Usuarios y 1 Visitante están viendo este tema.

28 Mayo, 2024, 02:36 pm
Leído 1284 veces

ignisFede

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 2
  • País: ar
  • Karma: +0/-0
He encontrado una forma tan absurdamente fácil de encontrar el siguiente número primo que no me  parece real.

Lo intente con los primeros 100 mil números y el modelo matemático no fallo ni una sola vez.

Este modelo es ideal para escalar en procesos paralelos en búsqueda de un nuevo número primo, con unir varias computadoras se podría predecir con facilidad el siguiente número primo y estoy hablando de número tan grandes que hoy día parecen inalcanzables de procesar.

Adjunto PDF explicado.


PDF integrado en el mensaje desde la administración.

0. Arrancamos con el número que queramos (llamémosle CONTADOR), pero tenemos que transformar todos los primos anteriores (incluir el contador si es un primo) a ese número elegido en polinomio en BASE a cada primo. Luego ir al PASO 2.

1. Crear un polinomio en base al número primo que se encontró. Luego ir al PASO 2.

2. Incrementar una unidad en todos los polinomios y el contador, y luego verificar que el exponente de menor valor no es cero en ninguno de los polinomios. Luego si encontramos un nuevo número primo ir al PASO 1, sino volver a iniciar el PASO 2.

(Se busca que ningún polinomio sea CERO en su menor valor representativo porque de esa forma nos aseguramos que ese número no es múltiplo del polinomio. Al final de la hoja hay una mejor explicación).

Si cumple esta regla, sabemos que estamos frente a un número primo nuevo.

Voy a plasmar un ejemplo para que se pueda apreciar mejor los puntos mencionados.

Ejemplo:
Arrancamos con lo siguiente (PASO 0):
i) Arrancaremos con el “contador” en 2 en BASE 10
ii) Polinomio en BASE 2

Entonces el número 2 en BASE 10 representado en BASE 2 quedaría:

\[
\text{Contador: } 2 \, (\text{BASE 10})
\]

\[
2^1 \quad 2^0 \quad \rightarrow \quad \text{Polinomio en BASE 2}
\]

\[
1 \quad 0
\]

Polinomio que tenemos (BASE 2).

(Como indica el PASO 0, luego ir al PASO 2).

Ahora lo que hay que hacer es sumar una unidad a todos los polinomios y al CONTADOR que tenemos, en nuestro caso por ahora solo tenemos el polinomio en BASE 2 y el CONTADOR en 2. Así que quedaría de la siguiente manera:

\[
\text{Contador: } 3 \, (\text{BASE 10})
\]

\[
2^1 \quad 2^0 \quad \rightarrow \quad \text{Polinomio en BASE 2}
\]

\[
1 \quad 1
\]

Ahora como dice el punto 2, verificaremos en todos los polinomios (En nuestro caso solo tenemos el polinomio en BASE 2) y cómo podemos ver \(2^0\) se encuentra en 1 que es distinto a 0. Como dice el punto 1, al encontrar un nuevo primo, hay que transformarlo en un polinomio en base al número primo encontrado.

Ahora tenemos Polinomio que tenemos (BASE 2, BASE 3).

Así que vamos al PASO 1 y agregamos un nuevo polinomio (En BASE 3), lo seteamos con el número primo que encontramos (El número 3).
Así que nos quedaría así:

\[
\text{Contador: } 3 \, (\text{BASE 10})
\]

\[
2^1 \quad 2^0 \quad \rightarrow \quad \text{Polinomio en BASE 2}
\]

\[
1 \quad 1
\]

\[
3^1 \quad 3^0 \quad \rightarrow \quad \text{Polinomio en BASE 3}
\]

\[
1 \quad 0
\]

Se vuelve a repetir el proceso de incrementar una unidad a todos los polinomios que tenemos y al CONTADOR.
Y nos queda de la siguiente manera:

\[
\text{Contador: } 4 \, (\text{BASE 10})
\]

\[
2^2 \quad 2^1 \quad 2^0 \quad \rightarrow \quad \text{Polinomio en BASE 2}
\]

\[
1 \quad 0 \quad 0
\]

\[
3^2 \quad 3^1 \quad 3^0 \quad \rightarrow \quad \text{Polinomio en BASE 3}
\]

\[
0 \quad 1 \quad 1
\]

Calculamos lo que nos indica el punto 2 y vemos que NO todos los polinomios son distintos de CERO en el término de menor denominación.
En este caso el polinomio en BASE 2 termina en CERO.

\[
2^2 \quad 2^1 \quad 2^0 \quad \rightarrow \quad \text{Polinomio en BASE 2}
\]

\[
1 \quad 0 \quad 0
\]

Por lo tanto, no estamos frente a un nuevo número primo, así que solo hay que iniciar nuevamente el PASO 2.

Se vuelve a repetir el proceso de incrementar una unidad a todos los polinomios que tenemos y al CONTADOR.
Y nos queda de la siguiente manera:

\[
\text{Contador: } 5 \, (\text{BASE 10})
\]

\[
2^2 \quad 2^1 \quad 2^0 \quad \rightarrow \quad \text{Polinomio en BASE 2}
\]

\[
1 \quad 0 \quad 1
\]

\[
3^2 \quad 3^1 \quad 3^0 \quad \rightarrow \quad \text{Polinomio en BASE 3}
\]

\[
0 \quad 1 \quad 2
\]

Ahora como dice el punto 2, verificaremos en todos los polinomios y como podemos observar todos los dígitos de menor peso son distintos a CERO.

\[
2^2 \quad 2^1 \quad 2^0 \quad \rightarrow \quad \text{Polinomio en BASE 2}
\]

\[
1 \quad 0 \quad 1
\]

\[
3^2 \quad 3^1 \quad 3^0 \quad \rightarrow \quad \text{Polinomio en BASE 3}
\]

\[
0 \quad 1 \quad 2
\]

Así que efectivamente estamos frente a un nuevo número primo (El número 5).
Así que vamos al PASO 1 y agregamos un nuevo polinomio (En BASE 5), lo seteamos con el número primo que encontramos (El 5).

\[
\text{Contador: } 5 \, (\text{BASE 10})
\]

\[
2^2 \quad 2^1 \quad 2^0 \quad \rightarrow \quad \text{Polinomio en BASE 2}
\]

\[
1 \quad 0 \quad 1
\]

\[
3^2 \quad 3^1 \quad 3^0 \quad \rightarrow \quad \text{Polinomio en BASE 3}
\]

\[
0 \quad 1 \quad 2
\]

\[
5^2 \quad 5^1 \quad 5^0 \quad \rightarrow \quad \text{Polinomio en BASE 5}
\]

\[
0 \quad 1 \quad 0
\]

Se vuelve a repetir el proceso de incrementar una unidad a todos los polinomios que tenemos.
Y nos queda de la siguiente manera:

\[
\text{Contador: } 6 \, (\text{BASE 10})
\]

\[
2^2 \quad 2^1 \quad 2^0 \quad \rightarrow \quad \text{Polinomio en BASE 2}
\]

\[
1 \quad 1 \quad 0
\]

\[
3^2 \quad 3^1 \quad 3^0 \quad \rightarrow \quad \text{Polinomio en BASE 3}
\]

\[
0 \quad 2 \quad 0
\]

\[
5^2 \quad 5^1 \quad 5^0 \quad \rightarrow \quad \text{Polinomio en BASE 5}
\]

\[
0 \quad 1 \quad 1
\]

Calculamos lo que nos indica el punto 2 y vemos que NO todos los polinomios son distintos de CERO en el término de menor denominación.
En este caso el polinomio en BASE 2 y BASE 3 termina en CERO.

\[
2^2 \quad 2^1 \quad 2^0 \quad \rightarrow \quad \text{Polinom

io en BASE 2}
\]

\[
1 \quad 1 \quad 0
\]

\[
3^2 \quad 3^1 \quad 3^0 \quad \rightarrow \quad \text{Polinomio en BASE 3}
\]

\[
0 \quad 2 \quad 0
\]

\[
5^2 \quad 5^1 \quad 5^0 \quad \rightarrow \quad \text{Polinomio en BASE 5}
\]

\[
0 \quad 1 \quad 1
\]

Este método se puede seguir indefinidamente e ir detectando los nuevos números primos.
La facilidad que tiene para integrarse a un script de la informática y buscar en paralelo números primos es brutal.

Porque no se tiene que ir dividiendo al nuevo número que se quiere corroborar con todos los demás para saber si es divisible, sino que se tiene que incrementar los polinomios que tenemos (en sí serían los números primos esos polinomios) y “ya está contemplado con el punto 2 si es divisible o no”.

Incluso si vemos bien ni siquiera tenemos que llevar por completo el contador de TODO el polinomio en cada BASE, solo nos interesa el de menor denominación.

Así también que se puede combinar con otras teorías para realizar menos cálculos para saber si es un número primo. Como por ejemplo si estamos analizando el CONTADOR 12, no deberíamos de analizar el polinomio 11 y 7 ya que son mayor a la raíz cuadrada de 12.

{bf Nota:}
¿A qué me refiero cuando digo que un número sea un múltiplo de un polinomio?
Me refiero a que ese número es divisible por su BASE si es CERO el menor peso del polinomio.

Ejemplo:
BASE 2:
\[
2^3 \quad 2^2 \quad 2^1 \quad 2^0
\]

Todo número que satisfaga el polinomio de BASE 2 y que termine en CERO su menor peso es un múltiplo de 2.

Como por ejemplo:
\[
2^3 \quad 2^2 \quad 2^1 \quad 2^0
\]

\[
0 \quad 1 \quad 0 \quad 0 \quad \rightarrow \quad 4 \quad \rightarrow \quad \text{Múltiplo de 2}
\]

\[
2^3 \quad 2^2 \quad 2^1 \quad 2^0
\]

\[
1 \quad 1 \quad 0 \quad 0 \quad \rightarrow \quad 12 \quad \rightarrow \quad \text{Múltiplo de 2}
\]

\[
2^3 \quad 2^2 \quad 2^1 \quad 2^0
\]

\[
1 \quad 0 \quad 0 \quad 0 \quad \rightarrow \quad 8 \quad \rightarrow \quad \text{Múltiplo de 2}
\]

O por ejemplo:
BASE 3:
\[
3^3 \quad 3^2 \quad 3^1 \quad 3^0
\]

\[
3^3 \quad 3^2 \quad 3^1 \quad 3^0
\]

\[
1 \quad 0 \quad 0 \quad 0 \quad \rightarrow \quad 27 \quad \rightarrow \quad \text{Múltiplo de 3}
\]

\[
3^3 \quad 3^2 \quad 3^1 \quad 3^0
\]

\[
0 \quad 0 \quad 2 \quad 0 \quad \rightarrow \quad 6 \quad \rightarrow \quad \text{Múltiplo de 3}
\]

\[
3^3 \quad 3^2 \quad 3^1 \quad 3^0
\]

\[
0 \quad 2 \quad 1 \quad 0 \quad \rightarrow \quad 21 \quad \rightarrow \quad \text{Múltiplo de 3}
\]

30 Mayo, 2024, 09:46 am
Respuesta #1

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Tengo entendido que los pdf pueden tener virus o algo así, no tendría problema en mirarlo si fuese un usuario antiguo, y además no hay necesidad de poner eso sin decir el método acá, por eso me parece aún más sospechoso.

La última vez que un usuario dijo haber encontrado algo grande, luego de varias vueltas en vano, resultó que sus definiciones de las cosas eran distintas a lo normal.

Yo quiero ver tu método, pero acá. Estaré mirando el tema.

30 Mayo, 2024, 11:08 am
Respuesta #2

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 58,905
  • País: es
  • Karma: +0/-0
Hola

ignisFede: Bienvenido al foro.

Recuerda leer y seguir  las reglas del mismo así como el tutorial del LaTeX para escribir las fórmulas matemáticas correctamente.

 He transcrito el contenido de tu PDF al mensaje.

Citar
He encontrado una forma tan absurdamente fácil de encontrar el siguiente número primo que no me  parece real.

Lo intente con los primeros 100 mil números y el modelo matemático no fallo ni una sola vez.

Este modelo es ideal para escalar en procesos paralelos en búsqueda de un nuevo número primo, con unir varias computadoras se podría predecir con facilidad el siguiente número primo y estoy hablando de número tan grandes que hoy día parecen inalcanzables de procesar.

Adjunto PDF explicado.

 Pero simplemente lo que haces equivale a ir recorriendo los números naturales uno por uno y analizas si son divisibles por los primos anteriores a él (que vas almacenando). Analizas esa divisibilidad escribiendo los números en base \( p_i \) para todos los primos \( p_i \) menores que el número, de manera que la divisibilidad se tiene si la última cifra es cero. Podría hacerse lo mismo simplemente con contadores "módulo" el primo, o calculando simplemente \( mod(n,p)= \) resto de dividir \( n \) entre \( p_i \).

 Entonces no veo ningún motivo para que este método tan básico, sea más rápido ni más eficiente que otros.

 Aquí puedes consultar el método más rápido para obtener los primos hasta un cierto número \( n \). Es de orden de rapidez \( O(n) \).

https://en.wikipedia.org/wiki/Sieve_of_Atkin

 En tu método el número de operaciones en cada paso al incrementar \( n \) es igual al número de primos menores que \( n \) (que son los polinomios que tienes que incrementar). Este número es la función contadora de primos \( \pi(n) \) que es asintóticamente equivalente a \( n/log(n) \).

 Por tanto si llamamos \( f(x)=x/log(x) \), el orden de velocidad de tu algoritmo es:

\( \displaystyle\int_{2}^{n}f(x)df(x)\approx f(n)^2/2 \)

 es decir de orden \( O(n^2/log(n)^2) \), bastante más lento que el algoritmo indicado en el enlace que te di.

Saludos.

30 Mayo, 2024, 06:17 pm
Respuesta #3

ignisFede

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 2
  • País: ar
  • Karma: +0/-0
Buenas

Gracias por la bienvenida

Disculpen no soy bueno explicando.
Antes que nada les quiero pedir perdón de antemano, por no darle formato al texto, es que ando muy atareado esta semana y no pude entrar para ver el tutorial que me sugirieron.

Me refería cuando decía en la simplicidad de los cálculos cuando en los polinomios (primos) solo se necesita el valor de menor peso y se puede ignorar los demás pesos en los calculos, además de sumar más características como ir incrementando de a 2 (así evitamos los números pares).

Ahora expongo un ejemplo mejor:

Contador: 2(BASE 10)

2^1   2^0   -->   Polinomio en BASE 2
1   0   -->   En este caso no me interesa cuánto vale 2^1, solo me in-teresa saber el resultado de 2^0.

Asique no quedaría:

2^1   2^0   -->   Polinomio en BASE 2
X   0

Ahora sumamos a todos los polinomios 1 (después de este caso incrementaremos de 2 en 2) y al contador.

Contador: 3 (BASE 10)

2^0   -->   Polinomio en BASE 2
1   -->   Solo dejamos 2^0 que es lo que nos interesa

(Solo hicimos 2 sumas, una en el polinomio BASE2 y la otra en el contador)
Ahora como dice el punto 2, verificaremos en todos los polinomios (En nuestro caso solo tenemos el polinomio en BASE 2) y cómo podemos ver 2^0 se encuentra en 1 que es distinto a 0. Como dice el punto 1, al encontrar un nuevo primo, hay que transformarlo en un polinomio en base al número primo encontrado.

Ahora tenemos Polinomio que tenemos (BASE 2, BASE 3).

Así que vamos al PASO 1 y agregamos un nuevo polinomio (En BASE 3), lo seteamos con el número primo que encontramos (El número 3).
Así que nos quedaría así:

Contador: 3 (BASE 10)

2^0   -->   Polinomio en BASE 2
1   -->   Solo dejamos 2^0 que es lo que nos interesa

3^0   -->   Polinomio en BASE 3
0   -->   Solo dejamos 3^0 que es lo que nos interesa

Como se puede observar el acarreo no me interesa, solo me interesa el ultimo exponente de menor denominación.
Incluso a partir de ahora se incremente de 2 en 2, simplificando la mitad de las cuentas y hasta podemos obvia el polinomio en BASE2, ya que siempre va a dar 1 en su exponente de menor denominación al incrementar de 2 en 2.

Seguimos con el ejemplo.
Se vuelve a repetir el proceso de incrementar 2 unidades a todos los polinomios que tenemos y al CONTADOR.

Y nos queda de la siguiente manera:

Contador: 5(BASE 10)

(Polinomio de BASE2 ya dijimos que siempre nos va a dar 1, lo ignoramos)

3^0   -->   Polinomio en BASE 3
2
(Solo hicimos 2 sumas, una en el polinomio BASE3 y la otra en el contador)

Ahora como dice el punto 2, verificaremos en todos los polinomios y como podemos observar todos los dígitos de menor peso son distintos a CERO.
Así que efectivamente estamos frente a un nuevo número primo (El número 5).
Así que vamos al PASO 1 y agregamos un nuevo polinomio (En BASE 5), lo seteamos con el número primo que encontramos (El 5).

Contador: 5(BASE 10)

3^0   -->   Polinomio en BASE 3
2

5^0   -->   Polinomio en BASE 5
0

Se vuelve a repetir el proceso de incrementar 2 unidades a todos los polinomios que tenemos y al CONTADOR.

Y nos queda de la siguiente manera:

Contador: 7(BASE 10)

3^0   -->   Polinomio en BASE 3
2 + 2 = 4 --> 1 (Como dije anteriormente el acarreo no me interesa)

5^0   -->   Polinomio en BASE 5
0 + 2 = 2

Pasado a mas claro nos queda
3^0   -->   Polinomio en BASE 3
1

5^0   -->   Polinomio en BASE 5
2

(Solo hicimos 3 sumas, una en el polinomio BASE3, BASE5 y la otra en el contador)
En total hicimos 7 (2+2+3) sumas y ya encontramos los primos 3, 5 y 7.
A esto me refería la facilidad que se requiere. El poder de calculo que se requirió para esto es muy bajo, ya que la suma de enteros es la instrucción del procesador que más rápido hace.
Ni hablar que este proceso se puede realizar en paralelo, repartiendo rango de polinomios a otras PCs.
Además, que también se puede fusionar con otras teorías, como que cuando se realiza la comprobación solo se haga hasta la raíz cuadrada del contador.
Espero que me haya podido expresar mejor.
Me gustaría saber su opinión, si de esta manera se puede reducir apreciablemente las cuentas para conseguir el siguiente número primo.




31 Mayo, 2024, 09:39 am
Respuesta #4

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 58,905
  • País: es
  • Karma: +0/-0
Hola

Disculpen no soy bueno explicando.
Antes que nada les quiero pedir perdón de antemano, por no darle formato al texto, es que ando muy atareado esta semana y no pude entrar para ver el tutorial que me sugirieron.

Me refería cuando decía en la simplicidad de los cálculos cuando en los polinomios (primos) solo se necesita el valor de menor peso y se puede ignorar los demás pesos en los calculos, además de sumar más características como ir incrementando de a 2 (así evitamos los números pares).

 Te entendí perfectamente y es así como lo vuelves a explicar como asimilé tu idea la primera vez. Eso de "el valor de menor peso" es a lo que me refiero cuando hablo de "contadores módulo el primo":

Pero simplemente lo que haces equivale a ir recorriendo los números naturales uno por uno y analizas si son divisibles por los primos anteriores a él (que vas almacenando). Analizas esa divisibilidad escribiendo los números en base \( p_i \) para todos los primos \( p_i \) menores que el número, de manera que la divisibilidad se tiene si la última cifra es cero. Podría hacerse lo mismo simplemente con contadores "módulo" el primo, o calculando simplemente \( mod(n,p)= \) resto de dividir \( n \) entre \( p_i \).

Citar
A esto me refería la facilidad que se requiere. El poder de calculo que se requirió para esto es muy bajo, ya que la suma de enteros es la instrucción del procesador que más rápido hace.

El que las operaciones se hagan con un bit o con 32 bits (por decir algo) es intrascendente en principio; es decir lo más importante para contar operaciones es el orden: línea, cuadrático, cúbico, ó intermedios.

Es decir da un poco igual que para cribar los primos hasta \( n \) hagan falta \( n \) operaciones o \( 10n \) operaciones; es más relevante si hacen falta \( an \) operaciones ó \( bn^2 \) operaciones. Donde las constantes \( a,b \) son intrascendentes, porque lo que está claro es que para \( n \) suficientemente grande, \( bn^2>>an \).

Entonces como te dije tu método a medida que va obteniendo primos en el paso \( n \) hace tantas operaciones (aunque sólo sean de incrementar una unidad un número) como primos ha obtenido hasta entonces, es decir, \( \pi(n) \) operaciones. Eso lleva a la estimación del número de operaciones que te dije en mi anterior mensaje y que NO mejora otros métodos existentes.

Saludos.

01 Junio, 2024, 10:38 pm
Respuesta #5

Richard R Richard

  • Ingeniero Industrial
  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 4,041
  • País: ar
  • Karma: +2/-0
  • Sexo: Masculino
  • Dentro de la ciencia todo,fuera de la ciencia nada
 Hola Luis, de la página de la wiki que brindas  no me queda claro el orden $$O$$,  , aver si lo entendí...


$$O(N)$$ significa que  hay una relación lineal entre el el número de operaciones necesaria y el número primo que se busca,
Si  fuera $$O(N^2)$$ el número de operaciones crecería con el cuadrado del número que intento llegar  mas grande el numero, tantísimo mayor el tiempo necesario para ejecutar...

Citar
A special modified "enumerating lattice points" variation which is not the above version of the Sieve of Atkin can theoretically compute primes up to N using O(N/log log N)
Pero lo que no entiendo cómo es que llegan a $$O(N/ \log(\log N))$$ , querría decir que se utilizarían menos operaciones que los números primos que estas buscando y la verdad , a primera vista no me lo creo para nada, pero sería interesantísimo que así fuera. ¿Es así cómo debo interpretarlo? Como es que con una operación puedo sacar mas de 1 primo  :o  , a lo sumo entiendo que con una única operacion sacaria 1  solo primo pero no más de uno por operación para que se cumpa ser $$O<N$$


Gracias y saludos
Saludos  \(\mathbb {R}^3\)

02 Junio, 2024, 10:07 am
Respuesta #6

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 58,905
  • País: es
  • Karma: +0/-0
Hola

Pero lo que no entiendo cómo es que llegan a $$O(N/ \log(\log N))$$ , querría decir que se utilizarían menos operaciones que los números primos que estasue con una única operacion sacaria 1  solo primo pero no más de uno por operación para que se cumpa ser $$O<N$$ buscando y la verdad , a primera vista no me lo creo para nada, pero sería interesantísimo que así fuera. ¿Es así cómo debo interpretarlo? Como es que con una operación puedo sacar mas de 1 primo  :o  , a lo sumo entiendo q

Ojo, pero la \( N \) no es el número primo que se busca, sino hasta que número natural se están buscando primos. Es decir cuando se habla de una complejidad $$O(N/ \log(\log N))$$ se refiere al número de operaciones para obtener los números primos comprendidos entre \( 1 \) y \( N \).

Saludos.

02 Junio, 2024, 05:06 pm
Respuesta #7

Richard R Richard

  • Ingeniero Industrial
  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 4,041
  • País: ar
  • Karma: +2/-0
  • Sexo: Masculino
  • Dentro de la ciencia todo,fuera de la ciencia nada
sino hasta que número natural se están buscando primos.
Oops, ok , entendido, gracias.
Saludos  \(\mathbb {R}^3\)