Из Википедии:
Сложность алгоритма -
O(n(logn)(loglogn))
битовые операции.
Как вы к этому пришли?
То, что loglogn
термин включает сложность, говорит мне, что sqrt(n)
где-то есть.
Предположим, я использую решето для первых 100 чисел ( n = 100
), предполагая, что маркировка чисел как составных занимает постоянное время (реализация массива), количество использованных нами раз mark_composite()
будет примерно таким, как
n/2 + n/3 + n/5 + n/7 + ... + n/97 = O(n^2)
А чтобы найти следующее простое число (например, чтобы перейти к нему 7
после вычеркивания всех чисел, кратных ему 5
), количество операций будет O(n)
.
Итак, сложность была бы O(n^3)
. Вы согласны?