Złożoność algorytmu to
O(n(logn)(loglogn))
operacje bitowe.
Jak do tego doszedłeś?
To, że złożoność obejmuje ten loglogn
termin, mówi mi, że sqrt(n)
gdzieś jest.
Załóżmy, że uruchamiam sito na pierwszych 100 liczbach ( n = 100
), zakładając, że oznaczenie liczb jako złożonych zajmuje stały czas (implementacja tablicy), liczba razy, której użyjemy, mark_composite()
byłaby podobna
n/2 + n/3 + n/5 + n/7 + ... + n/97 = O(n^2)
Aby znaleźć następną liczbę pierwszą (na przykład do przeskoczenia 7
po przekreśleniu wszystkich liczb, które są wielokrotnościami 5
), liczba operacji wyniosłaby O(n)
.
Więc złożoność byłaby O(n^3)
. Czy sie zgadzasz?