Da Wikipedia:Tempo complessità del Crivello di Eratostene algoritmo
La complessità dell'algoritmo è
O(n(logn)(loglogn))
operazioni bit.
Come si arriva a questo?
Che la complessità includa il termine loglogn
mi dice che c'è un sqrt(n)
da qualche parte.
Supponiamo sto facendo funzionare il setaccio sui primi 100 numeri (n = 100
), supponendo che la marcatura i numeri come composito richiede tempo costante (attuazione array), il numero di volte che utilizziamo mark_composite()
sarebbe qualcosa come
n/2 + n/3 + n/5 + n/7 + ... + n/97 = O(n^2)
E per trovare il numero primo successivo (per esempio per passare alla 7
dopo aver attraversato tutti i numeri che sono multipli di 5
), il numero di operazioni sarebbe O(n)
.
Quindi, la complessità sarebbe O(n^3)
. Sei d'accordo?
non so circa il resto (troppo mathy per il mio troppo sonno destra del cervello ora), ma la radice quadrata deriva dal fatto che se un numero non ha divisori inferiori alla sua radice quadrata, è primo. Inoltre, ho appena appreso che loglog (n) significa che c'è una radice quadrata. Bello. –
Come il loglog (n) è lì significa che c'è un sqrt (n) da qualche parte? (@Martinho: Perché dici che "l'hai appena appreso"?) L'analisi attuale non implica alcuna radice quadrata! – ShreevatsaR