Короткий ответ : сложность времени составляет O (n log n) .
Внутренний цикл каждый раз принимает n шагов.Действительно:
for(int j = 1; j <= n; j = j + i)
some_constant_statement
Здесь j
всегда повторяется от 1
(включительно) до n
(включительно), поэтому будет выполняться n/i
константных операторов.
Итогоколичество операций, таким образом:
n
---
\ 1
n / ---
--- i
i=1
Сумма составляет гармонических рядов [wiki] .Мы можем приблизить это с помощью приближения Стирлинга [wiki] .Таким образом, мы знаем, что:
n n
--- ---
\ 1 \ 1
/ --- ≤ ln n ≤ / ---
--- i+1 --- i
i=1 i=1
Это означает, что мы можем утверждать, что общее количество операций имеет временную сложность O (n × ln n) .Поскольку log a (b) = log a / log b , мы можем сформулировать это как O (n log n)