@Matt: журнал (журнал (10000)) ~2
От статьи Википедии (который Вы процитировали) Решето Atkin:
Это решето вычисляет начала до N использование
O(N/log log N)
операции с только N 1/2+o (1) глоток> биты памяти. Это немного лучше, чем решето Эратосфена, которое используетO(N)
операции, и O (N 1/2 глоток> (журнал регистрируются, N) / регистрируют N) биты памяти (A.O.L. Atkin, D.J. Bernstein, 2004) . Эти асимптотические вычислительные сложности включают простую оптимизацию, такую как факторизация колеса и разделение вычисления к меньшим блокам.
Данный асимптотические вычислительные сложности вперед O(N)
(для Eratosthenes) и O(N/log(log(N)))
(для Atkin) мы не можем сказать (для маленького N=10_000
), какой алгоритм, если реализовано будет быстрее.
Ахим Flammenkamp записал в Решето Эратосфена :
процитированный:
@num1
Для интервалов, больше о 10^9, конечно, для тех> 10^10, Решето Эратосфена, превзойден по характеристикам Решетом Atkins и Bernstein, который использует неприводимые бинарные квадратичные формы. Посмотрите их статью для получения информации о фоне, а также абзац 5 W. Кандидатская диссертация Голуэя.
Поэтому для 10_000
Решето Эратосфена может быть быстрее тогда Решето Atkin.
Для ответа на OP код prime_sieve.c (процитирован num1
)
Отрицательный просмотр вперед говорит, что в этой позиции следующее регулярное выражение не может соответствовать.
Давайте рассмотрим упрощенный пример:
a(?!b(?!c))
a Match: (?!b) succeeds
ac Match: (?!b) succeeds
ab No match: (?!b(?!c)) fails
abe No match: (?!b(?!c)) fails
abc Match: (?!b(?!c)) succeeds
Последний пример - это двойное отрицание : оно допускает b
, за которым следует c
. Вложенный отрицательный просмотр вперед становится положительным: должен присутствовать c
.
В каждом примере сопоставляется только a
. Предварительный просмотр является лишь условием и не добавляет к совпадающему тексту.
Поисковые запросы могут быть вложенными.
Таким образом, это регулярное выражение соответствует «drupal-6.14 /», то есть , а не , за которым следует «сайты», то есть не ] с последующим «/ all» или «/default".
Используя другие слова, мы можем сказать, что он соответствует "drupal-6.14 /", то есть не , за которым следует "sites" , если только не сопровождается "/ all" или "/ default"