Складність алгоритму -
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)
. Ви згодні?