Из Википедия:
Сложность алгоритма составляет 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)
. Согласны ли вы?