De Wikipedia:
La complejidad del algoritmo son
O(n(logn)(loglogn))
las operaciones de bits.
¿Cómo llegas a eso?
Que la complejidad incluya el loglogn
término me dice que hay un sqrt(n)
lugar.
Supongamos que estoy ejecutando el tamiz en los primeros 100 números ( n = 100
), suponiendo que marcar los números como compuestos toma un tiempo constante (implementación de matriz), la cantidad de veces que usamos mark_composite()
sería algo así como
n/2 + n/3 + n/5 + n/7 + ... + n/97 = O(n^2)
Y para encontrar el siguiente número primo (por ejemplo, para saltar 7
después de tachar todos los números que son múltiplos de 5
), el número de operaciones sería O(n)
.
Entonces, la complejidad sería O(n^3)
. ¿Estás de acuerdo?