Da Wikipedia:
La complessità dell'algoritmo è costituita dalle
O(n(logn)(loglogn))
operazioni sui bit.
Come ci si arriva?
Il fatto che la complessità includa il loglogn
termine mi dice che c'è un sqrt(n)
da qualche parte.
Supponiamo che io esegua il setaccio sui primi 100 numeri ( n = 100
), assumendo che contrassegnare i numeri come composti richieda tempo costante (implementazione dell'array), il numero di volte che usiamo mark_composite()
sarebbe qualcosa di simile
n/2 + n/3 + n/5 + n/7 + ... + n/97 = O(n^2)
E per trovare il numero primo successivo (ad esempio a cui saltare 7
dopo aver barrato tutti i numeri multipli di 5
), il numero di operazioni sarebbe O(n)
.
Quindi, la complessità sarebbe O(n^3)
. Sei d'accordo?