@Matt : log(log(10000)) est ~2
Extrait de l'article de wikipedia (que vous avez cité) Tamis d'Atkin :
Ce tamis calcule les nombres premiers jusqu'à N en utilisant O(N/log log N)
opérations avec seulement N 1/2+o(1) bits de mémoire. C'est un peu mieux que le tamis d Eratosthène qui utilise O(N)
et O(N 1/2 (log log N)/log N) bits de mémoire (A.O.L. Atkin, D.J. Bernstein, 2004) . Ces complexités asymptotiques computationnelles comprennent des optimisations simples, comme la roue factorisation, et la division du calcul à des blocs plus petits.
Étant donné les complexités asymptotiques de calcul le long de O(N)
(pour Eratosthenes) et O(N/log(log(N)))
(pour Atkin) on ne peut pas dire (pour les petits N=10_000
) quel algorithme, s'il est mis en œuvre, sera le plus rapide.
Achim Flammenkamp a écrit dans Le tamis d'Eratosthène :
cité par :
@num1
Pour les intervalles supérieurs à 10^9, sûrement pour ceux > 10^10, le crible d' Eratosthenes est surpassé par le crible d'Atkins et Bernstein qui utilise des formes quadratiques binaires irréductibles irréductibles. Voir leur article pour le contexte informations de base ainsi que le paragraphe 5 de W. Galway pour le paragraphe 5 de sa thèse de doctorat.
Par conséquent, pour 10_000
Le tamis d'Eratosthenes peut être plus rapide que le tamis d'Atkin.
Pour répondre à OP, le code est prime_sieve.c (cité par num1
)
2 votes
Gardez à l'esprit que trouver les 10000 premières primes est une tâche relativement modeste. La différence entre un algorithme rapide et un algorithme lent pourrait être de quelques secondes.
8 votes
Curieusement, cela me rappelle le problème 7 du projet Euler : projecteuler.net/index.php?section=problèmes&id=7
0 votes
@stalepretzel Cette limitation de mesure pourrait être dépassée en exécutant l'algorithme 1000 fois de suite, par exemple.