Это метод "Сита Эратосфена" для поиска простых чисел.Для каждого простого теста if(a[i])
успешно выполняется и выполняется внутренний цикл.Рассмотрим, как заканчивается этот внутренний цикл на каждом шаге (помните, что условие j*i < N
или, что эквивалентно, j < N/i
):
- i = 2 -> j = 2, 3, 4,..., N / 2
- i = 3 -> j = 3, 4, 5, ..., N / 3
- i = 4 -> не простое число
- i = 5 -> j = 5, 6, 7, ..., N / 5
- ...
Суммирование общего количества операций (включая инициализацию массива/ извлечение простых чисел) дает время выполнения, упомянутое в книге.
Подробнее см. в этом вопросе , включая обсуждение того, как в терминах битовых операций это превращается в расширение O(n (log n) (log log n)) согласно статье Википедии .