¿Cuál es el mejor algoritmo para calcular la cantidad de números primos?

La respuesta literal es imprimir “infinito” ya que hay un número infinito de números primos. Sin embargo, supongo que te refieres al número de primos menor o igual que algún número de entrada n.

Lo mejor en términos de uso sencillo sería utilizar algún software existente:

  • Python / SymPy primepi
  • Pari / GP primepi
  • Wolfram Alpha Pi [n]
  • Perl / ntheory prime_count
  • primer conde

Los tres últimos utilizan métodos de vanguardia, y el último es, en computadoras paralelas, con mucho, el más rápido. También es el único práctico para entradas de más de 64 bits. Los dos últimos también tienen buenas aproximaciones y límites disponibles.

Lo mejor en términos de fácil programación sería el Tamiz de Eratóstenes. Simplemente criba hasta tu número n y cuenta el número de números primos. Esto está bien para números pequeños, pero muy pronto comienza a usar memoria excesiva y necesita pasar a un tamiz segmentado (que también aumenta el rendimiento). Pero incluso eso se agota y se vuelve bastante lento. Se puede debatir si el método de división de prueba más lento (como se muestra en la respuesta de Gipma) es más fácil de programar, pero un SoE implementado correctamente es solo de 4 líneas de código (ver Wikipedia), así que creo que no está bien definido. El SoE será mucho más rápido a medida que aumente el tamaño de entrada. Los métodos de conteo rápido primario son órdenes de magnitud más rápidos que el tamizado y la única respuesta práctica para entradas de más de, por ejemplo, 10 ^ 11 (depende de su tolerancia para las horas de espera frente a los segundos). Para insumos pequeños, como menos de unos pocos millones, una división de tamiz o de prueba debería ser completamente adecuada para la mayoría de los propósitos.

Lo mejor en términos de eficiencia algorítmica sería el método LMO extendido (las mejoras de Deléglise y Rivat al método LMO de Lagarias, Miller y Odlyzko) o el método analítico de Lagarias y Odlyzko (primero analizado por Riesel y Göhl, creo, mejorado por Galway e implementado por Franke et al. y Platt). Los métodos combinatorios (incluido el OVM) son prácticamente programables por muchas personas: vinculé a dos implementaciones de código abierto anteriores y hay más. El libro de Riesel de 1994 describe los algoritmos anteriores de Meissel, Legendre y Lehmer de una manera muy comprensible. Los métodos analíticos no son del todo fáciles de entender ni de programar correctamente; los han realizado instituciones de investigación o como trabajo académico serio.

Los últimos registros se han establecido utilizando el programa de cuenta abierta de código abierto de Kim Walisch, que utiliza el método Deléglise-Rivat. Teniendo en cuenta que esto implica no solo un algoritmo rápido y una implementación eficiente, sino también un soporte de 128 bits y un gran esfuerzo en la paralelización eficiente en clústeres.

Es Tamiz de Eratóstenes – Wikipedia y funciona en el tiempo O(n) , donde n es el número hasta el que desea averiguar todos los números primos.

Si desea recorrer la respuesta del 1 al 100:

En Java:

En c ++:

En python:

Espero que esto ayude, no olvides votar si estás de acuerdo en mi respuesta -Sid

Happy Coding 😀

¡El número de números primos es infinito!

More Interesting

¿Qué algoritmo en aprendizaje automático es el más adecuado para unir los datos entrantes nuevos con los datos existentes en la base de datos SQLite?

Cómo crear un algoritmo que comprima el código binario

¿Se conoce algún algoritmo general para factorizar números muy grandes?

¿Qué 'palabras' debo saber para resolver problemas de programación o problemas matemáticos relacionados?

Quiero aprender la estructura de datos y Java, ¿cuál debería aprender primero?

¿Cuál es el valor de la suma k ^ 2 * C (n, k) 0 a n?

¿Cómo se puede ser bueno para resolver problemas de algoritmos / programación? Soy un principiante, y me sugirieron que leyera el libro CLRS para aprender sobre algoritmos.

¿Qué algoritmos avanzados usa un sitio como Facebook?

Cómo aprender la estrategia de algoritmos

¿Cuáles son los 100 deben resolver preguntas de SPOJ?

¿Cómo se debe aprender la codificación, haciendo algoritmos, desde el nivel básico, dado que no tiene experiencia en codificación? (especialmente desde el punto de vista de la colocación y también dado el hecho de que me queda un año para que comience mi temporada de colocación).

¿Cuál es una manera sencilla de encontrar big-O, big-Theta y big-Omega para una función determinada?

¿Están sobrevalorados los algoritmos, en comparación con la escritura de software limpio, escalable y de fácil mantenimiento? Sé mi parte de algoritmos y acerté mis entrevistas. Pero en la industria, se trata de cumplir con los requisitos de software y administrar la base del código.

¿Cuál crees que es el algoritmo de optimización más inteligente?

Cómo encontrar la longitud máxima de la submatriz en una matriz determinada