Решето Эратосфена
Решето́ Эратосфе́на — алгоритм нахождения всех простых чисел до некоторого целого числа n, который приписывают древнегреческому математику Эратосфену Киренскому. Название алгоритма говорит о принципе его работы: алгоритм осуществляет фильтрацию списка чисел от 2 до n. По мере прохождения списка составные числа исключаются, а простые остаются.
История


Этот метод описан во «Введении в арифметику» Никомаха Герасского. Никомах называет автором метода Эратосфена. То же делает и Ямвлих в своём комментарии к этому сочинению Никомаха.
Название «решето» метод получил потому, что во времена Эратосфена писали числа на дощечке, покрытой воском, и прокалывали дырочки в тех местах, где были написаны составные числа. Поэтому дощечка являлась неким подобием решета, через которое «просеивались» все составные числа, а оставались только числа простые.
Никомах, во II веке н. э., объясняет, что метод решета «высеивает» простые числа из нечётных, отделяя от них составные числа, которые он находит, перечисляя для каждого нечетного числа n все его кратные числа как каждое n-ное число в ряду нечётных чисел, начиная с n. Число 2 он здесь не рассматривал, так как в качестве возможно простых чисел он рассматривал только нечётные.
Символически, используя знак " \ " как «разность множеств», его весьма многословное словесное описание выражает алгоритм
Primes = {3,5,7,9,...} \ Composites Composites = { 3n,5n,7n,9n,... for n in {3,5,7,9,...} } где каждая последовательность "3n,5n,7n,9n ..." находится прямым перечислением как указано выше, без умножений.
Британец [англ.], 16 веков спустя, горячо критикует это описание, заявляя что «истинный» метод Эратосфена «наверняка» был «гораздо умнее», начиная перечисление кратных с квадратов самих простых чисел прямо в процессе их распознавания:
Primes = {3,5,7,9,...} \ Composites Composites = { n²,n²+2n,n²+4n,... for n in Primes } Алгоритм

Для нахождения всех простых чисел не больше заданного числа n, следуя методу Эратосфена, нужно выполнить следующие шаги:
- Выписать подряд все целые числа от двух до n (2, 3, 4, ..., n).
- Пусть переменная p изначально равна двум — первому простому числу.
- Зачеркнуть в списке числа от 2p до n, считая шагами по p (это будут числа, кратные p: 2p, 3p, 4p, ...).
- Найти первое незачёркнутое число в списке, большее чем p, и присвоить значению переменной p это число.
- Повторять шаги 3 и 4, пока возможно.
Теперь все незачёркнутые числа в списке — это все простые числа от 2 до n.
На практике, алгоритм можно улучшить следующим образом. На шаге № 3 числа можно зачеркивать, начиная сразу с числа p2, потому что все меньшие числа, кратные p, обязательно имеют простой делитель меньше p, и они уже будут зачеркнуты к этому времени. И, соответственно, останавливать алгоритм можно, когда p2 станет больше, чем n. Кроме того, все простые числа, кроме 2, — нечётные числа, и поэтому для них можно считать шагами по 2p, начиная с p2.
Пример для n = 30
Запишем натуральные числа, начиная от 2, до 30 в ряд:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
Первое число в списке, 2 — простое. Пройдём по ряду чисел, зачёркивая все числа, кратные 2 (то есть, каждое второе, начиная с 22 = 4):
2 3456789101112131415161718192021222324252627282930
Следующее незачеркнутое число, 3 — простое. Пройдём по ряду чисел, зачёркивая все числа, кратные 3 (то есть, каждое третье, начиная с 32 = 9):
2 3456789101112131415161718192021222324252627282930
Следующее незачеркнутое число, 5 — простое. Пройдём по ряду чисел, зачёркивая все числа, кратные 5 (то есть, каждое пятое, начиная с 52 = 25):
2 3456789101112131415161718192021222324252627282930
Следующее незачеркнутое число — 7. Его квадрат, 49 — больше 30, поэтому на этом работа завершена. Все составные числа уже зачеркнуты:
2 3 5 7 11 13 17 19 23 29
Псевдокод
Оптимизированная реализация (начинающаяся с квадратов) на псевдокоде:
Вход: натуральное число n Выход: все простые числа от 2 до n. Пусть A — булевый массив, индексируемый числами от 2 до n, изначально заполненный значениями true. для i = 2, 3, 4, ..., пока i2 ≤ n: если A[i] = true: для j = i2, i2 + i, i2 + 2i, ..., пока j ≤ n: назначить A[j] := false возвращаем: все числа i, для которых A[i] = true.
Сложность алгоритма
Сложность алгоритма составляет операций при составлении таблицы простых чисел до
.
Доказательство сложности
При выбранном для каждого простого
будет выполняться внутренний цикл, который совершит
действий. Сложность алгоритма можно получить из оценки следующей величины:
Так как количество простых чисел, меньших либо равных , оценивается как
, и, как следствие,
-е простое число примерно равно
, то сумму можно преобразовать:
Здесь из суммы выделено слагаемое для первого простого числа, чтобы избежать деления на ноль. Данную сумму можно оценить интегралом
В итоге получается для изначальной суммы:
Более строгое доказательство (и дающее более точную оценку с точностью до константных множителей) можно найти в книге Hardy и Wright «An Introduction to the Theory of Numbers».
Модификации метода
Неограниченный, постепенный вариант
В этом варианте простые числа вычисляются последовательно, без ограничения сверху, как числа, находящиеся в промежутках между составными числами, которые вычисляются для каждого простого числа p, начиная с его квадрата, с шагом в p (или для нечетных простых чисел 2p). Может быть представлен абстрактно в парадигме потоков данных как
primes = {2,3,...} \ { p², p²+p, ... for p in primes } используя нотацию абстракции списков, где \ обозначает разницу между арифметическими прогрессиями.
Первое простое число 2 (среди возрастающих положительных целых чисел) заранее известно, поэтому в этом самореферентном определении нет порочного круга.
Более конкретный псевдокод с поэтапным отсеиванием, в неэффективной реализации, для простоты сравнения с нижеследующими вариантами:
primes = sieve [2..] where sieve [p, ...xs] = [p, ...sieve (xs \ [p², p²+p..])]
Более эффективный вариант отделяет на каждом шагу из начала списка не одно лишь первое число, а сразу все числа не превосходящие квадрата очередного простого числа. Это реализуется посредством откладывания отсеивания каждым простым числом, до его квадрата:
primes = [2, ...sieve primes [3..]] where sieve [p, ...ps] [...h, p², ...xs] = [...h, ...sieve ps (xs \ [p², p²+p..])]
Перебор делителей
Решето Эратосфена часто путают с алгоритмами, которые поэтапно [англ.]составные числа, тестируя каждое из чисел-кандидатов на делимость по одному простому числу на каждом этапе.
Широко известный функциональный код Дэвида Тёрнера 1975 г. часто принимают за решето Эратосфена, но на самом деле это неоптимальный вариант с перебором делителей:
primes = sieve [2..] where sieve [p, ...xs] = [p, ...sieve [x in xs if x%p > 0]]
В оптимальном варианте не используются делители, большие квадратного корня тестируемого числа.
Сегментированное решето
Как замечает Соренсон, главной проблемой реализации решета Эратосфена на вычислительных машинах является не количество выполняемых операций, а требования по объёму занимаемой памяти (впрочем, его замечание относится к неактуальному сейчас компьютеру DEC VAXstation 3200, выпущенному в 1989 году). При больших значениях n, диапазон простых чисел может превысить доступную память; хуже того, даже при сравнительно небольших n использование кэша памяти далеко от оптимального, так как алгоритм, проходя по всему массиву, нарушает принцип [англ.].
Для решения представленной проблемы используется сегментированное решето, в котором за итерацию просеивается только часть диапазона простых чисел. Данный метод известен с 1970-х годов и работает следующим образом:
- Разделяем диапазон от 2 до n на отрезки (сегменты) некоторой длины Δ ≤ √n.
- Находим все простые числа в первом отрезке, используя обычное решето.
- Каждый из последующих отрезков оканчивается на некотором числе m. Находим все простые числа в отрезке следующим образом:
- Создаем булевый массив размера Δ
- Для каждого простого числа p ≤ √m из уже найденных, отмечаем в массиве как «непростые» все числа кратные p, перебирая числа с шагом в p, начиная с наименьшего кратного p числа в данном отрезке.
Если число Δ выбрано равным √n, то сложность алгоритма по памяти оценивается как O(√n), а операционная сложность остаётся такой же, что и у обычного решета Эратосфена.
Для случаев, когда n настолько велико, что все просеиваемые простые числа меньшие √n не могут уместиться в памяти, как того требует алгоритм сегментированного сита, используют более медленные, но с гораздо меньшими требованиями по памяти алгоритмы, например .
Решето Эйлера
Доказательство тождества Эйлера для дзета-функции Римана содержит механизм отсеивания составных чисел подобный решету Эратосфена, но так, что каждое составное число удаляется из списка только один раз. Схожее решето описано в Gries & Misra 1978 г. как решето с линейным временем работы (см. ниже).
Составляется исходный список начиная с числа 2. На каждом этапе алгоритма первый номер в списке берется как следующее простое число, результаты произведения которого на каждое число в списке помечаются для последующего удаления. После этого из списка убирают первое число и все помеченные числа, и процесс повторяется вновь:
[2] (3) 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 ... [3] (5) 7 11 13 17 19 23 25 29 31 35 37 41 43 47 49 53 55 59 61 65 67 71 73 77 79 ... [4] (7) 11 13 17 19 23 29 31 37 41 43 47 49 53 59 61 67 71 73 77 79 ... [5] (11) 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 ... [...]
Здесь показан пример начиная с нечетных чисел, после первого этапа алгоритма. Таким образом, после k-го этапа рабочий список содержит только числа взаимно простые с первыми k простыми числами (то есть числа не кратные ни одному из первых k простых чисел), и начинается с (k+1)-го простого числа. Все числа в списке, меньшие квадрата его первого числа, являются простыми.
В псевдокоде,
primes = sieve [2..] where sieve [p, ...xs] = [p, ...sieve (xs \ [p², ...p*xs])]
Решето только по нечётным числам
Поскольку все чётные числа, кроме 2, — составные, то можно вообще не обрабатывать никак чётные числа, а оперировать только нечётными числами. Во-первых, это позволит вдвое сократить объём требуемой памяти. Во-вторых, это уменьшит количество выполняемых алгоритмом операций (примерно вдвое).
В псевдокоде:
primes = [2, ...sieve [3,5..]] where sieve [p, ...xs] = [p, ...sieve (xs \ [p², p²+2p..])]
Это можно обобщить на числа взаимно простые не только с 2 (то есть нечетные числа), но также и с 3, 5, и т. д..
Уменьшение объёма потребляемой памяти
Алгоритм Эратосфена фактически оперирует с битами памяти. Следовательно, можно существенно сэкономить потребление памяти, храня
переменных булевского типа не как
байт, а как
бит, то есть
байт памяти.
Такой подход — «битовое сжатие» — усложняет оперирование этими битами. Любое чтение или запись бита будут представлять собой несколько арифметических операций. Но с другой стороны существенно улучшается компактность в памяти. Бо́льшие интервалы умещаются в кэш-память которая работает гораздо быстрее обычной так что при работе по-сегментно общая скорость увеличивается.
Решето Эратосфена с линейным временем работы
Этот алгоритм находит составные числа как перечисление формулы
{ (piqjrk...) for p,q,r,... in primes, where i+j+k+... > 1 } Для этого поддерживается список простых чисел pr[], поначалу пустой. В ходе работы алгоритма этот список будет постепенно дополняться и в конце работы будет содержать все простые числа от 2 до n.
Также поддерживается массив lp[] (lp от англ. least prime) где для всех i от 2 до n, lp[i] будет содержать минимальный простой делитель числа i. Изначально все величины lp[i] равны 0.
Дальше перебираем числа i от 2 до n в порядке возрастания. Для каждого i:
- 1. Если lp[i] ≠ 0, это означает, что текущее число i — составное, и его минимальным простым делителем является lp[i].
- 2. Если lp[i] = 0, это означает, что текущее число i — простое, так как для него так и не обнаружилось других делителей. Присваиваем lp[i] = i и добавляем i в конец списка pr[].
- 3. Итак, lp[i] является минимальным простым делителем числа i. Для всех p последовательно взятых из pr[], не превосходящих lp[i], назначаем lp[p ⋅ i] = p.
Утверждается, что таким образом каждое значение в lp[] назначается только один раз.
Псевдокод
Вход: натуральное число n Пусть pr - целочисленный список, поначалу пустой; lp - целочисленный массив, индексируемый от 2 до n, заполненный нулями для i := 2, 3, 4, ..., до n: если lp[i] = 0: lp[i] := i pr[] += {i} для p из pr пока p ≤ lp[i] и p*i ≤ n: lp[p*i] := p Выход: все числа в списке pr. Сложность алгоритма на практике
Решето Эратосфена является популярным способом оценки производительности компьютера. Как видно из вышеизложенного доказательства сложности алгоритма, избавившись от константы и слагаемого очень близкого к нулю (ln (ln n - ln ln n) - ln ln 2 ≈ ln ln n), временная сложность вычисления всех простых чисел меньше n аппроксимируется следующим соотношением O(n ln ln n). Однако алгоритм имеет экспоненциальную временную сложность в отношении размера входных данных, что делает его псевдополиномиальным алгоритмом. Памяти же для базового алгоритма требуется O(n).
Сегментированная версия имеет ту же операционную сложность O(n ln ln n),. что и несегментированная версия, но уменьшает потребность в используемой памяти до размера сегмента (размер сегмента значительно меньше размера всего массива простых чисел), который равен O(√n/ln n). Также существует очень редко встречающееся на практике оптимизированное сегментированное решето Эратосфена. Оно строится за O(n) операций и занимает O(√n ln ln n/ln n) бит в памяти.
На практике оказывается, что оценка ln ln n не очень точна даже для максимальных практических диапазонов таких как 1016. Ознакомившись с вышеописанным доказательством сложности, нетрудно понять откуда взялась неточность оценки. Расхождение с оценкой можно объяснить следующим образом: в пределах данного практического диапазона просеивания существенное влияние оказывают постоянные смещения. Таким образом очень медленно растущий член ln ln n не становится достаточно большим, чтобы константами можно было справедливо пренебречь, до тех пор пока n не приблизится к бесконечности, что естественно выходит за границы любого прикладного диапазона просеивания. Данный факт показывает, что для актуальных на сегодняшний день входных данных производительность решета Эратосфена намного лучше, чем следовало ожидать, используя только асимптотические оценки временной сложности.
Решето Эратосфена работает быстрее, чем часто сравниваемое с ним решето Аткина только для значений n меньших 10 10 . Сказанное справедливо при условии, что операции занимают примерно одно и то же время в циклах центрального процессора, а это является разумным предположением для одного алгоритма, работающего с огромным битовым массивом. С учётом этого предположения получается, что сито Аткина быстрее чем максимально факторизованное решето Эратосфена для n свыше 10 13 , но при таких диапазонах просеивания потребуется занять огромное пространство в оперативной памяти, даже если была использована «битовая упаковка». Однако раздел о сегментированной версии решета Эратосфена показывает, что предположение о сохранении равенства во времени, затрачиваемом на одну операцию, между двумя алгоритмами не выполняется при сегментации. В свою очередь это приводит к тому, что решето Аткина (несегментированное) работает медленнее, чем сегментированное решето Эратосфена с увеличением диапазона просеивания, за счёт уменьшения времени на операцию для второго.
Использование нотации O большого также не является правильным способом сравнения практических характеристик даже для вариаций решета Эратосфена, поскольку данная нотация игнорирует константы и смещения, которые могут быть очень значительными для прикладных диапазонов. Например, одна из вариаций решета Эратосфена известная как решето Притчарда имеет производительность O(n), но её базовая реализация требует либо алгоритма «одного большого массива» (то есть использования обычного массива, в котором хранятся все числа до n), который ограничивает его диапазон использования до объёма доступной памяти, либо он должен быть сегментирован для уменьшения использования памяти. Работа Притчарда уменьшила требования к памяти до предела, но платой за данное улучшение по памяти является усложнение вычислений, что приводит увеличению операционной сложности алгоритмов.
Популярным способом ускорения алгоритмов, работающих с большими массивами чисел, является разного рода факторизация. Применение методов факторизации даёт значительное уменьшение операционной сложности за счёт оптимизации входного массива данных. Для индексных алгоритмов часто используют кольцевую факторизацию. Рассматриваемые в данной статье алгоритмы нахождения всех простых чисел до заданного n подобные решету Эратосфена относятся к индексным, что позволяет применять к ним метод кольцевой факторизации.
Несмотря на теоретическое ускорение, получаемое с помощью кольцевой факторизации, на практике существуют факторы, которые не учитываются при расчётах, но способны оказать существенное влияние на поведение алгоритма, что в результате может не дать ожидаемого прироста в быстродействии. Рассмотрим наиболее существенные из них:
- Умножение и деление. При аналитических расчётах предполагается, что скорость выполнения арифметических операций равноценна. Но на самом деле это не так, и умножение, и деление выполняются гораздо медленнее, чем сложение и вычитание. Таким образом данный фактор никак не влияет на решето Эратосфена, поскольку оно использует только сложение и вычитание, но является весьма существенным для решета Питчарда (один из результатов усложнения вычислений упомянутого выше).
- Оптимизация компилятора. Компилятор оптимизирует на стадии компиляции все программы для более корректного исполнения машиной. Но часто бывает очень сложно сказать, какой вклад даёт данная оптимизация, и будет ли этот вклад одинаковым для двух различных алгоритмов.
- Кэш. Процессор использует кэш, чтобы ускорить извлечение инструкций и данных из памяти. Наличие кэша приводит к тому, что программы, использующие локализованные ссылки, будут работать быстрее. Но алгоритмы просеивания простых чисел, которые используют факторизацию высокой степени, часто генерируют случайные ссылки в память, что снижает их производительность.
Для наглядности представления вклада факторизации в производительность алгоритмов просеивания ниже приведены две таблицы. В таблицах приведены результаты измерения реального времени исполнения решета Эратосфена и решета Питчарда в секундах для разных диапазонов n и разных степеней кольцевой факторизации. Ei и Pi обозначения для решета Эратосфена и Питчарда соответственно, где индекс i означает степень кольцевой факторизации. E0 и P0 означают отсутствие факторизации.
n E0 E1 E2 E3 E4 E5 500 0.00043 0.00029 0.00027 0.00048 0.00140 0.01035 5000 0.00473 0.00305 0.00254 0.00293 0.00551 0.03207 50000 0.05156 0.03281 0.02617 0.02578 0.03164 0.10663 500000 0.55817 0.35037 0.28240 0.28358 0.28397 0.47028 5000000 6.06719 3.82905 3.20722 3.25214 3.28104 3.38455
Из таблицы видно, что лучшую производительность имеет решето Эратосфена со средней степенью факторизации E2. Данный факт можно объяснить влиянием кэш-фактора, рассмотренного выше, на алгоритмы с высокой степенью факторизации.
n P0 P1 P2 P3 P4 P5 500 0.00147 0.00074 0.00050 0.00051 0.00095 0.00649 5000 0.01519 0.00777 0.00527 0.00453 0.00430 0.00973 50000 0.15507 0.08203 0.05664 0.04843 0.04180 0.04413 500000 1.60732 0.86254 0.61597 0.53825 0.47146 0.43787 5000000 16.47706 9.00177 6.57146 5.83518 5.27427 4.88251
С увеличением n соотношение времен становится всё больше в пользу решета Эратосфена, а на диапазоне n = 5000000 оно стабильно быстрее при любых факторизациях. Данный факт ещё раз подтверждает проигрыш в быстродействии решета Питчарда из-за сложных вычислений.
См. также
- Решето Сундарама
- Решето Аткина
- [англ.]
- Корекурсия
Примечания
- Никомах Герасский, Введение в арифметику, I, XIII, 2. по-гречески, по-русски Архивная копия от 1 апреля 2022 на Wayback Machine
- Hoche R. Nicomachi Geraseni Pythagorei Introductionis Arithmeticae libri II (Lipsiae) (неопр.) / ed.. — 1866.
- Horsley, Rev. Samuel, F. R. S., "Κόσκινον Ερατοσθένους or, The Sieve of Eratosthenes. Being an Account of His Method of Finding All the Prime Numbers, " Philosophical Transactions (1683—1775), Vol. 62. (1772), pp. 327—347 Архивная копия от 2 октября 2018 на Wayback Machine.
- Депман И. Я. История арифметики. Пособие для учителей. — М.: Просвещение, 1965. — С. 133. — 34 000 экз.
- Sedgewick, Robert. Algorithms in C++ (неопр.). — Addison-Wesley, 1992. — ISBN 0-201-51059-6., p. 16.
- Jonathan Sorenson, An Introduction to Prime Number Sieves, Computer Sciences Technical Report #909, Department of Computer Sciences University of Wisconsin-Madison, January 2 1990 (the use of optimization of starting from squares, and thus using only the numbers whose square is below the upper limit, is shown).
- Pritchard, Paul, "Linear prime-number sieves: a family tree, " Sci. Comput. Programming 9:1 (1987), pp. 17-35.
- Строго говоря, внутренний цикл выполняется для каждого простого
, но
=
, поэтому, традиционно, для краткости, квадратный корень опускают.
- Hardy and Wright "An Introduction to the Theory of Numbers, p. 349
- O’Neill, Melissa E., «The Genuine Sieve of Eratosthenes» Архивная копия от 9 ноября 2017 на Wayback Machine, Journal of Functional Programming, Published online by Cambridge University Press 9 October 2008 doi:10.1017/S0956796808007004.
- Colin Runciman, «FUNCTIONAL PEARL: Lazy wheel sieves and spirals of primes», Journal of Functional Programming, Volume 7 Issue 2, March 1997; также здесь Архивная копия от 19 октября 2012 на Wayback Machine.
- Turner, David A. SASL language manual. Tech. rept. CS/75/1. Department of Computational Science, University of St. Andrews 1975. (
primes = sieve [2..]; sieve (p:nos) = p:sieve (remove (multsof p) nos); remove m = filter (not . m); multsof p n = rem n p==0) - Crandall & Pomerance, Prime Numbers: A Computational Perspective, second edition, Springer: 2005, pp. 121-24.
- Bays, Carter; Hudson, Richard H. The segmented sieve of Eratosthenes and primes in arithmetic progressions to 1012 (англ.) // BIT : journal. — 1977. — Vol. 17, no. 2. — P. 121—127. — doi:10.1007/BF01932283.
- J. Sorenson, The pseudosquares prime sieve Архивная копия от 17 октября 2012 на Wayback Machine, Proceedings of the 7th International Symposium on Algorithmic Number Theory. (ANTS-VII, 2006).
- David Gries, Jayadev Misra. A Linear Sieve Algorithm for Finding Prime Numbers [1978]
- Peng, T. A. (Fall 1985). One Million Primes Through the Sieve. BYTE. pp. 243–244. Дата обращения: 19 марта 2016.
- Paul Pritchard, A sublinear additive sieve for finding prime numbers, Communications of the ACM 24 (1981), 18-23. MR: 600730
- Paul Pritchard, Fast compact prime number sieves (among others), Journal of Algorithms 4 (1983), 332—344. MR: 729229
- Paul Pritchard, Explaining the wheel sieve, Acta Informatica 17 (1982), 477—485. MR: 685983
- A. O. L. ATKIN AND D. J. BERNSTEIN. PRIME SIEVES USING BINARY QUADRATIC FORMS // MATHEMATICS OF COMPUTATION. Архивировано 24 декабря 2017 года.
- Meertens, Lambert. Calculating the Sieve of Eratosthenes // Journal of functional programming.
- В.А. Минаев, Н.П. Васильев, В.В. Лукьянов, С.А. Никонов, Д.В. Никеров. [http://vestnik-rosnou.ru/pdf/n4y2013/p29.pdf ИНДЕКСНЫЕ АЛГОРИТМЫ ВЫЧИСЛЕНИЯ ПРОСТЫХ ЧИСЕЛ С ИСПОЛЬЗОВАНИЕМ МЕТОДА КОЛЬЦЕВОЙ ФАКТОРИЗАЦИИ] // ВЕСТНИК. — 2013. — № 4. — С. 29. Архивировано 22 декабря 2017 года.
- Jonathan Sorenson. An Analysis of Two Prime Number Sieves // Computer Sciences Department University of Wisconsin-Madison. — С. 8—10.
- В.А. Минаев, Н.П. Васильев, В.В. Лукьянов, С.А. Никонов, Д.В. Никеров. [http://vestnik-rosnou.ru/pdf/n4y2013/p29.pdf ИНДЕКСНЫЕ АЛГОРИТМЫ ВЫЧИСЛЕНИЯ ПРОСТЫХ ЧИСЕЛ С ИСПОЛЬЗОВАНИЕМ МЕТОДА КОЛЬЦЕВОЙ ФАКТОРИЗАЦИИ] // ВЕСТНИК. — 2013. — № 4. — С. 30—31. Архивировано 22 декабря 2017 года.
- В.А. Минаев, Н.П. Васильев, В.В. Лукьянов, С.А. Никонов, Д.В. Никеров. [http://vestnik-rosnou.ru/pdf/n4y2013/p29.pdf ИНДЕКСНЫЕ АЛГОРИТМЫ ВЫЧИСЛЕНИЯ ПРОСТЫХ ЧИСЕЛ С ИСПОЛЬЗОВАНИЕМ МЕТОДА КОЛЬЦЕВОЙ ФАКТОРИЗАЦИИ] // ВЕСТНИК. — 2013. — № 4. — С. 30—33. Архивировано 22 декабря 2017 года.
- Jonathan Sorenson. An Analysis of Two Prime Number Sieves // Computer Sciences Department University of Wisconsin-Madison. — С. 16—18.
- Jonathan Sorenson. An Analysis of Two Prime Number Sieves // Computer Sciences Department University of Wisconsin-Madison. — С. 16.
- Jonathan Sorenson. An Analysis of Two Prime Number Sieves // Computer Sciences Department University of Wisconsin-Madison. — С. 17.
Литература
- Эратосфеново решето // Элоквенция — Яя. — М. : Советская энциклопедия, 1957. — С. 141. — (Большая советская энциклопедия : [в 51 т.] / гл. ред. Б. А. Введенский ; 1949—1958, т. 49).
- Гальперин Г. «Просто о простых числах» // Квант. — 1987. — № 4. — С. 10—14,38.
- Неопубликованные материалы Л.Эйлера по теории чисел / РАН, Институт истории естествознания и техники, С.-Петерб. фил.; Сост. Матвиевская Г.П. [и др.]; Отв. ред. Невская Н.И. — СПб.: Наука, 1997. — ISBN 5-02-024847-9.
- Проф. Д.Ф.Егоров. Элементы теории чисел. — Государственное издательство Москва, 1923. (недоступная ссылка)
- Кордемский Б. А. Математическая смекалка. — М.: ГИФМЛ, 1958. — 576 с.
Ссылки
- Решето Эратосфена от М. Гарднера
- Алгоритм составления таблицы простых чисел от заданного до другого числа
- Реализация алгоритма поиска простых чисел на Java
- Доказательство сложности алгоритма
- Еще раз о поиске простых чисел
Википедия, чтение, книга, библиотека, поиск, нажмите, истории, книги, статьи, wikipedia, учить, информация, история, скачать, скачать бесплатно, mp3, видео, mp4, 3gp, jpg, jpeg, gif, png, картинка, музыка, песня, фильм, игра, игры, мобильный, телефон, Android, iOS, apple, мобильный телефон, Samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Сеть, компьютер, Информация о Решето Эратосфена, Что такое Решето Эратосфена? Что означает Решето Эратосфена?
Resheto Eratosfe na algoritm nahozhdeniya vseh prostyh chisel do nekotorogo celogo chisla n kotoryj pripisyvayut drevnegrecheskomu matematiku Eratosfenu Kirenskomu Nazvanie algoritma govorit o principe ego raboty algoritm osushestvlyaet filtraciyu spiska chisel ot 2 do n Po mere prohozhdeniya spiska sostavnye chisla isklyuchayutsya a prostye ostayutsya IstoriyaResheto Eratosfena v grecheskom izdanii Nikomaha grecheskie chisla g 3 e 5 z 7 8 9 ia 11 Pervyj opublikovannyj v novoe vremya analiz metoda resheta Eratosfena i ego dokazatelstvo angl Etot metod opisan vo Vvedenii v arifmetiku Nikomaha Gerasskogo Nikomah nazyvaet avtorom metoda Eratosfena To zhe delaet i Yamvlih v svoyom kommentarii k etomu sochineniyu Nikomaha Nazvanie resheto metod poluchil potomu chto vo vremena Eratosfena pisali chisla na doshechke pokrytoj voskom i prokalyvali dyrochki v teh mestah gde byli napisany sostavnye chisla Poetomu doshechka yavlyalas nekim podobiem resheta cherez kotoroe proseivalis vse sostavnye chisla a ostavalis tolko chisla prostye Nikomah vo II veke n e obyasnyaet chto metod resheta vyseivaet prostye chisla iz nechyotnyh otdelyaya ot nih sostavnye chisla kotorye on nahodit perechislyaya dlya kazhdogo nechetnogo chisla n vse ego kratnye chisla kak kazhdoe n noe chislo v ryadu nechyotnyh chisel nachinaya s n Chislo 2 on zdes ne rassmatrival tak kak v kachestve vozmozhno prostyh chisel on rassmatrival tolko nechyotnye Simvolicheski ispolzuya znak kak raznost mnozhestv ego vesma mnogoslovnoe slovesnoe opisanie vyrazhaet algoritmPrimes 3 5 7 9 Composites Composites 3n 5n 7n 9n for n in 3 5 7 9 gde kazhdaya posledovatelnost 3n 5n 7n 9n nahoditsya pryamym perechisleniem kak ukazano vyshe bez umnozhenij Britanec angl 16 vekov spustya goryacho kritikuet eto opisanie zayavlyaya chto istinnyj metod Eratosfena navernyaka byl gorazdo umnee nachinaya perechislenie kratnyh s kvadratov samih prostyh chisel pryamo v processe ih raspoznavaniya Primes 3 5 7 9 Composites Composites n n 2n n 4n for n in Primes AlgoritmAnimaciya shagov algoritma Eratosfena dlya nahozhdeniya prostyh chisel do 120 Dlya nahozhdeniya vseh prostyh chisel ne bolshe zadannogo chisla n sleduya metodu Eratosfena nuzhno vypolnit sleduyushie shagi Vypisat podryad vse celye chisla ot dvuh do n 2 3 4 n Pust peremennaya p iznachalno ravna dvum pervomu prostomu chislu Zacherknut v spiske chisla ot 2p do n schitaya shagami po p eto budut chisla kratnye p 2p 3p 4p Najti pervoe nezachyorknutoe chislo v spiske bolshee chem p i prisvoit znacheniyu peremennoj p eto chislo Povtoryat shagi 3 i 4 poka vozmozhno Teper vse nezachyorknutye chisla v spiske eto vse prostye chisla ot 2 do n Na praktike algoritm mozhno uluchshit sleduyushim obrazom Na shage 3 chisla mozhno zacherkivat nachinaya srazu s chisla p2 potomu chto vse menshie chisla kratnye p obyazatelno imeyut prostoj delitel menshe p i oni uzhe budut zacherknuty k etomu vremeni I sootvetstvenno ostanavlivat algoritm mozhno kogda p2 stanet bolshe chem n Krome togo vse prostye chisla krome 2 nechyotnye chisla i poetomu dlya nih mozhno schitat shagami po 2p nachinaya s p2 Primer dlya n 30Zapishem naturalnye chisla nachinaya ot 2 do 30 v ryad 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Pervoe chislo v spiske 2 prostoe Projdyom po ryadu chisel zachyorkivaya vse chisla kratnye 2 to est kazhdoe vtoroe nachinaya s 22 4 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Sleduyushee nezacherknutoe chislo 3 prostoe Projdyom po ryadu chisel zachyorkivaya vse chisla kratnye 3 to est kazhdoe trete nachinaya s 32 9 2 3 4 5 6 7 8910 11 12 13 141516 17 18 19 202122 23 24 25 262728 29 30 Sleduyushee nezacherknutoe chislo 5 prostoe Projdyom po ryadu chisel zachyorkivaya vse chisla kratnye 5 to est kazhdoe pyatoe nachinaya s 52 25 2 3 4 5 6 7 8910 11 12 13 141516 17 18 19 202122 23 2425262728 29 30 Sleduyushee nezacherknutoe chislo 7 Ego kvadrat 49 bolshe 30 poetomu na etom rabota zavershena Vse sostavnye chisla uzhe zacherknuty 2 3 5 7 11 13 17 19 23 29PsevdokodOptimizirovannaya realizaciya nachinayushayasya s kvadratov na psevdokode Vhod naturalnoe chislo n Vyhod vse prostye chisla ot 2 do n Pust A bulevyj massiv indeksiruemyj chislami ot 2 do n iznachalno zapolnennyj znacheniyami true dlya i 2 3 4 poka i2 n esli A i true dlya j i2 i2 i i2 2i poka j n naznachit A j false vozvrashaem vse chisla i dlya kotoryh A i true Slozhnost algoritmaSlozhnost algoritma sostavlyaet O nlog log n displaystyle O n log log n operacij pri sostavlenii tablicy prostyh chisel do n displaystyle n Dokazatelstvo slozhnosti Pri vybrannom n N displaystyle n in mathbb N dlya kazhdogo prostogo p P p n displaystyle p in mathbb P colon p leq n budet vypolnyatsya vnutrennij cikl kotoryj sovershit np displaystyle frac n p dejstvij Slozhnost algoritma mozhno poluchit iz ocenki sleduyushej velichiny p P p nnp n p P p n1p displaystyle sum limits p in mathbb P colon p leq n frac n p n cdot sum limits p in mathbb P colon p leq n frac 1 p Tak kak kolichestvo prostyh chisel menshih libo ravnyh n displaystyle n ocenivaetsya kak nln n displaystyle frac n ln n i kak sledstvie k displaystyle k e prostoe chislo primerno ravno kln k displaystyle k ln k to summu mozhno preobrazovat p P p n1p 12 k 2nln n1kln k displaystyle sum limits p in mathbb P colon p leq n frac 1 p approx frac 1 2 sum limits k 2 frac n ln n frac 1 k ln k Zdes iz summy vydeleno slagaemoe dlya pervogo prostogo chisla chtoby izbezhat deleniya na nol Dannuyu summu mozhno ocenit integralom 12 k 2nln n1kln k 2nln n1kln kdk ln ln k 2nln n ln ln nln n ln ln 2 ln ln n ln ln n ln ln 2 ln ln n displaystyle frac 1 2 sum k 2 frac n ln n frac 1 k ln k approx int limits 2 frac n ln n frac 1 k ln k dk ln ln k Bigr 2 frac n ln n ln ln frac n ln n ln ln 2 ln ln n ln ln n ln ln 2 approx ln ln n V itoge poluchaetsya dlya iznachalnoj summy p P p nnp nln ln n o n displaystyle sum limits p in mathbb P colon p leq n frac n p approx n ln ln n o n Bolee strogoe dokazatelstvo i dayushee bolee tochnuyu ocenku s tochnostyu do konstantnyh mnozhitelej mozhno najti v knige Hardy i Wright An Introduction to the Theory of Numbers Modifikacii metodaNeogranichennyj postepennyj variant V etom variante prostye chisla vychislyayutsya posledovatelno bez ogranicheniya sverhu kak chisla nahodyashiesya v promezhutkah mezhdu sostavnymi chislami kotorye vychislyayutsya dlya kazhdogo prostogo chisla p nachinaya s ego kvadrata s shagom v p ili dlya nechetnyh prostyh chisel 2p Mozhet byt predstavlen abstraktno v paradigme potokov dannyh kakprimes 2 3 p p p for p in primes ispolzuya notaciyu abstrakcii spiskov gde oboznachaet raznicu mezhdu arifmeticheskimi progressiyami Pervoe prostoe chislo 2 sredi vozrastayushih polozhitelnyh celyh chisel zaranee izvestno poetomu v etom samoreferentnom opredelenii net porochnogo kruga Bolee konkretnyj psevdokod s poetapnym otseivaniem v neeffektivnoj realizacii dlya prostoty sravneniya s nizhesleduyushimi variantami primes sieve 2 where sieve p xs p sieve xs p p p Bolee effektivnyj variant otdelyaet na kazhdom shagu iz nachala spiska ne odno lish pervoe chislo a srazu vse chisla ne prevoshodyashie kvadrata ocherednogo prostogo chisla Eto realizuetsya posredstvom otkladyvaniya otseivaniya kazhdym prostym chislom do ego kvadrata primes 2 sieve primes 3 where sieve p ps h p xs h sieve ps xs p p p Perebor delitelej Resheto Eratosfena chasto putayut s algoritmami kotorye poetapno angl sostavnye chisla testiruya kazhdoe iz chisel kandidatov na delimost po odnomu prostomu chislu na kazhdom etape Shiroko izvestnyj funkcionalnyj kod Devida Tyornera 1975 g chasto prinimayut za resheto Eratosfena no na samom dele eto neoptimalnyj variant s pereborom delitelej primes sieve 2 where sieve p xs p sieve x in xs if x p gt 0 V optimalnom variante ne ispolzuyutsya deliteli bolshie kvadratnogo kornya testiruemogo chisla Segmentirovannoe resheto Kak zamechaet Sorenson glavnoj problemoj realizacii resheta Eratosfena na vychislitelnyh mashinah yavlyaetsya ne kolichestvo vypolnyaemyh operacij a trebovaniya po obyomu zanimaemoj pamyati vprochem ego zamechanie otnositsya k neaktualnomu sejchas kompyuteru DEC VAXstation 3200 vypushennomu v 1989 godu Pri bolshih znacheniyah n diapazon prostyh chisel mozhet prevysit dostupnuyu pamyat huzhe togo dazhe pri sravnitelno nebolshih n ispolzovanie kesha pamyati daleko ot optimalnogo tak kak algoritm prohodya po vsemu massivu narushaet princip angl Dlya resheniya predstavlennoj problemy ispolzuetsya segmentirovannoe resheto v kotorom za iteraciyu proseivaetsya tolko chast diapazona prostyh chisel Dannyj metod izvesten s 1970 h godov i rabotaet sleduyushim obrazom Razdelyaem diapazon ot 2 do n na otrezki segmenty nekotoroj dliny D n Nahodim vse prostye chisla v pervom otrezke ispolzuya obychnoe resheto Kazhdyj iz posleduyushih otrezkov okanchivaetsya na nekotorom chisle m Nahodim vse prostye chisla v otrezke sleduyushim obrazom Sozdaem bulevyj massiv razmera D Dlya kazhdogo prostogo chisla p m iz uzhe najdennyh otmechaem v massive kak neprostye vse chisla kratnye p perebiraya chisla s shagom v p nachinaya s naimenshego kratnogo p chisla v dannom otrezke Esli chislo D vybrano ravnym n to slozhnost algoritma po pamyati ocenivaetsya kak O n a operacionnaya slozhnost ostayotsya takoj zhe chto i u obychnogo resheta Eratosfena Dlya sluchaev kogda n nastolko veliko chto vse proseivaemye prostye chisla menshie n ne mogut umestitsya v pamyati kak togo trebuet algoritm segmentirovannogo sita ispolzuyut bolee medlennye no s gorazdo menshimi trebovaniyami po pamyati algoritmy naprimer Resheto Ejlera Dokazatelstvo tozhdestva Ejlera dlya dzeta funkcii Rimana soderzhit mehanizm otseivaniya sostavnyh chisel podobnyj reshetu Eratosfena no tak chto kazhdoe sostavnoe chislo udalyaetsya iz spiska tolko odin raz Shozhee resheto opisano v Gries amp Misra 1978 g kak resheto s linejnym vremenem raboty sm nizhe Sostavlyaetsya ishodnyj spisok nachinaya s chisla 2 Na kazhdom etape algoritma pervyj nomer v spiske beretsya kak sleduyushee prostoe chislo rezultaty proizvedeniya kotorogo na kazhdoe chislo v spiske pomechayutsya dlya posleduyushego udaleniya Posle etogo iz spiska ubirayut pervoe chislo i vse pomechennye chisla i process povtoryaetsya vnov 2 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 3 5 7 11 13 17 19 23 25 29 31 35 37 41 43 47 49 53 55 59 61 65 67 71 73 77 79 4 7 11 13 17 19 23 29 31 37 41 43 47 49 53 59 61 67 71 73 77 79 5 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 Zdes pokazan primer nachinaya s nechetnyh chisel posle pervogo etapa algoritma Takim obrazom posle k go etapa rabochij spisok soderzhit tolko chisla vzaimno prostye s pervymi k prostymi chislami to est chisla ne kratnye ni odnomu iz pervyh k prostyh chisel i nachinaetsya s k 1 go prostogo chisla Vse chisla v spiske menshie kvadrata ego pervogo chisla yavlyayutsya prostymi V psevdokode primes sieve 2 where sieve p xs p sieve xs p p xs Resheto tolko po nechyotnym chislam Poskolku vse chyotnye chisla krome 2 sostavnye to mozhno voobshe ne obrabatyvat nikak chyotnye chisla a operirovat tolko nechyotnymi chislami Vo pervyh eto pozvolit vdvoe sokratit obyom trebuemoj pamyati Vo vtoryh eto umenshit kolichestvo vypolnyaemyh algoritmom operacij primerno vdvoe V psevdokode primes 2 sieve 3 5 where sieve p xs p sieve xs p p 2p Eto mozhno obobshit na chisla vzaimno prostye ne tolko s 2 to est nechetnye chisla no takzhe i s 3 5 i t d Umenshenie obyoma potreblyaemoj pamyati Algoritm Eratosfena fakticheski operiruet s n displaystyle n bitami pamyati Sledovatelno mozhno sushestvenno sekonomit potreblenie pamyati hranya n displaystyle n peremennyh bulevskogo tipa ne kak n displaystyle n bajt a kak n displaystyle n bit to est n 8 displaystyle n 8 bajt pamyati Takoj podhod bitovoe szhatie uslozhnyaet operirovanie etimi bitami Lyuboe chtenie ili zapis bita budut predstavlyat soboj neskolko arifmeticheskih operacij No s drugoj storony sushestvenno uluchshaetsya kompaktnost v pamyati Bo lshie intervaly umeshayutsya v kesh pamyat kotoraya rabotaet gorazdo bystree obychnoj tak chto pri rabote po segmentno obshaya skorost uvelichivaetsya Resheto Eratosfena s linejnym vremenem raboty Etot algoritm nahodit sostavnye chisla kak perechislenie formuly piqjrk for p q r in primes where i j k gt 1 Dlya etogo podderzhivaetsya spisok prostyh chisel pr ponachalu pustoj V hode raboty algoritma etot spisok budet postepenno dopolnyatsya i v konce raboty budet soderzhat vse prostye chisla ot 2 do n Takzhe podderzhivaetsya massiv lp lp ot angl least prime gde dlya vseh i ot 2 do n lp i budet soderzhat minimalnyj prostoj delitel chisla i Iznachalno vse velichiny lp i ravny 0 Dalshe perebiraem chisla i ot 2 do n v poryadke vozrastaniya Dlya kazhdogo i 1 Esli lp i 0 eto oznachaet chto tekushee chislo i sostavnoe i ego minimalnym prostym delitelem yavlyaetsya lp i 2 Esli lp i 0 eto oznachaet chto tekushee chislo i prostoe tak kak dlya nego tak i ne obnaruzhilos drugih delitelej Prisvaivaem lp i i i dobavlyaem i v konec spiska pr 3 Itak lp i yavlyaetsya minimalnym prostym delitelem chisla i Dlya vseh p posledovatelno vzyatyh iz pr ne prevoshodyashih lp i naznachaem lp p i p Utverzhdaetsya chto takim obrazom kazhdoe znachenie v lp naznachaetsya tolko odin raz Psevdokod Vhod naturalnoe chislo n Pust pr celochislennyj spisok ponachalu pustoj lp celochislennyj massiv indeksiruemyj ot 2 do n zapolnennyj nulyami dlya i 2 3 4 do n esli lp i 0 lp i i pr i dlya p iz pr poka p lp i i p i n lp p i p Vyhod vse chisla v spiske pr Slozhnost algoritma na praktikeResheto Eratosfena yavlyaetsya populyarnym sposobom ocenki proizvoditelnosti kompyutera Kak vidno iz vysheizlozhennogo dokazatelstva slozhnosti algoritma izbavivshis ot konstanty i slagaemogo ochen blizkogo k nulyu ln ln n ln ln n ln ln 2 ln ln n vremennaya slozhnost vychisleniya vseh prostyh chisel menshe n approksimiruetsya sleduyushim sootnosheniem O n ln ln n Odnako algoritm imeet eksponencialnuyu vremennuyu slozhnost v otnoshenii razmera vhodnyh dannyh chto delaet ego psevdopolinomialnym algoritmom Pamyati zhe dlya bazovogo algoritma trebuetsya O n Segmentirovannaya versiya imeet tu zhe operacionnuyu slozhnost O n ln ln n chto i nesegmentirovannaya versiya no umenshaet potrebnost v ispolzuemoj pamyati do razmera segmenta razmer segmenta znachitelno menshe razmera vsego massiva prostyh chisel kotoryj raven O n ln n Takzhe sushestvuet ochen redko vstrechayusheesya na praktike optimizirovannoe segmentirovannoe resheto Eratosfena Ono stroitsya za O n operacij i zanimaet O n ln ln n ln n bit v pamyati Na praktike okazyvaetsya chto ocenka ln ln n ne ochen tochna dazhe dlya maksimalnyh prakticheskih diapazonov takih kak 1016 Oznakomivshis s vysheopisannym dokazatelstvom slozhnosti netrudno ponyat otkuda vzyalas netochnost ocenki Rashozhdenie s ocenkoj mozhno obyasnit sleduyushim obrazom v predelah dannogo prakticheskogo diapazona proseivaniya sushestvennoe vliyanie okazyvayut postoyannye smesheniya Takim obrazom ochen medlenno rastushij chlen ln ln n ne stanovitsya dostatochno bolshim chtoby konstantami mozhno bylo spravedlivo prenebrech do teh por poka n ne priblizitsya k beskonechnosti chto estestvenno vyhodit za granicy lyubogo prikladnogo diapazona proseivaniya Dannyj fakt pokazyvaet chto dlya aktualnyh na segodnyashnij den vhodnyh dannyh proizvoditelnost resheta Eratosfena namnogo luchshe chem sledovalo ozhidat ispolzuya tolko asimptoticheskie ocenki vremennoj slozhnosti Resheto Eratosfena rabotaet bystree chem chasto sravnivaemoe s nim resheto Atkina tolko dlya znachenij n menshih 10 10 Skazannoe spravedlivo pri uslovii chto operacii zanimayut primerno odno i to zhe vremya v ciklah centralnogo processora a eto yavlyaetsya razumnym predpolozheniem dlya odnogo algoritma rabotayushego s ogromnym bitovym massivom S uchyotom etogo predpolozheniya poluchaetsya chto sito Atkina bystree chem maksimalno faktorizovannoe resheto Eratosfena dlya n svyshe 10 13 no pri takih diapazonah proseivaniya potrebuetsya zanyat ogromnoe prostranstvo v operativnoj pamyati dazhe esli byla ispolzovana bitovaya upakovka Odnako razdel o segmentirovannoj versii resheta Eratosfena pokazyvaet chto predpolozhenie o sohranenii ravenstva vo vremeni zatrachivaemom na odnu operaciyu mezhdu dvumya algoritmami ne vypolnyaetsya pri segmentacii V svoyu ochered eto privodit k tomu chto resheto Atkina nesegmentirovannoe rabotaet medlennee chem segmentirovannoe resheto Eratosfena s uvelicheniem diapazona proseivaniya za schyot umensheniya vremeni na operaciyu dlya vtorogo Ispolzovanie notacii O bolshogo takzhe ne yavlyaetsya pravilnym sposobom sravneniya prakticheskih harakteristik dazhe dlya variacij resheta Eratosfena poskolku dannaya notaciya ignoriruet konstanty i smesheniya kotorye mogut byt ochen znachitelnymi dlya prikladnyh diapazonov Naprimer odna iz variacij resheta Eratosfena izvestnaya kak resheto Pritcharda imeet proizvoditelnost O n no eyo bazovaya realizaciya trebuet libo algoritma odnogo bolshogo massiva to est ispolzovaniya obychnogo massiva v kotorom hranyatsya vse chisla do n kotoryj ogranichivaet ego diapazon ispolzovaniya do obyoma dostupnoj pamyati libo on dolzhen byt segmentirovan dlya umensheniya ispolzovaniya pamyati Rabota Pritcharda umenshila trebovaniya k pamyati do predela no platoj za dannoe uluchshenie po pamyati yavlyaetsya uslozhnenie vychislenij chto privodit uvelicheniyu operacionnoj slozhnosti algoritmov Populyarnym sposobom uskoreniya algoritmov rabotayushih s bolshimi massivami chisel yavlyaetsya raznogo roda faktorizaciya Primenenie metodov faktorizacii dayot znachitelnoe umenshenie operacionnoj slozhnosti za schyot optimizacii vhodnogo massiva dannyh Dlya indeksnyh algoritmov chasto ispolzuyut kolcevuyu faktorizaciyu Rassmatrivaemye v dannoj state algoritmy nahozhdeniya vseh prostyh chisel do zadannogo n podobnye reshetu Eratosfena otnosyatsya k indeksnym chto pozvolyaet primenyat k nim metod kolcevoj faktorizacii Nesmotrya na teoreticheskoe uskorenie poluchaemoe s pomoshyu kolcevoj faktorizacii na praktike sushestvuyut faktory kotorye ne uchityvayutsya pri raschyotah no sposobny okazat sushestvennoe vliyanie na povedenie algoritma chto v rezultate mozhet ne dat ozhidaemogo prirosta v bystrodejstvii Rassmotrim naibolee sushestvennye iz nih Umnozhenie i delenie Pri analiticheskih raschyotah predpolagaetsya chto skorost vypolneniya arifmeticheskih operacij ravnocenna No na samom dele eto ne tak i umnozhenie i delenie vypolnyayutsya gorazdo medlennee chem slozhenie i vychitanie Takim obrazom dannyj faktor nikak ne vliyaet na resheto Eratosfena poskolku ono ispolzuet tolko slozhenie i vychitanie no yavlyaetsya vesma sushestvennym dlya resheta Pitcharda odin iz rezultatov uslozhneniya vychislenij upomyanutogo vyshe Optimizaciya kompilyatora Kompilyator optimiziruet na stadii kompilyacii vse programmy dlya bolee korrektnogo ispolneniya mashinoj No chasto byvaet ochen slozhno skazat kakoj vklad dayot dannaya optimizaciya i budet li etot vklad odinakovym dlya dvuh razlichnyh algoritmov Kesh Processor ispolzuet kesh chtoby uskorit izvlechenie instrukcij i dannyh iz pamyati Nalichie kesha privodit k tomu chto programmy ispolzuyushie lokalizovannye ssylki budut rabotat bystree No algoritmy proseivaniya prostyh chisel kotorye ispolzuyut faktorizaciyu vysokoj stepeni chasto generiruyut sluchajnye ssylki v pamyat chto snizhaet ih proizvoditelnost Dlya naglyadnosti predstavleniya vklada faktorizacii v proizvoditelnost algoritmov proseivaniya nizhe privedeny dve tablicy V tablicah privedeny rezultaty izmereniya realnogo vremeni ispolneniya resheta Eratosfena i resheta Pitcharda v sekundah dlya raznyh diapazonov n i raznyh stepenej kolcevoj faktorizacii Ei i Pi oboznacheniya dlya resheta Eratosfena i Pitcharda sootvetstvenno gde indeks i oznachaet stepen kolcevoj faktorizacii E0 i P0 oznachayut otsutstvie faktorizacii n E0 E1 E2 E3 E4 E5500 0 00043 0 00029 0 00027 0 00048 0 00140 0 010355000 0 00473 0 00305 0 00254 0 00293 0 00551 0 0320750000 0 05156 0 03281 0 02617 0 02578 0 03164 0 10663500000 0 55817 0 35037 0 28240 0 28358 0 28397 0 470285000000 6 06719 3 82905 3 20722 3 25214 3 28104 3 38455 Iz tablicy vidno chto luchshuyu proizvoditelnost imeet resheto Eratosfena so srednej stepenyu faktorizacii E2 Dannyj fakt mozhno obyasnit vliyaniem kesh faktora rassmotrennogo vyshe na algoritmy s vysokoj stepenyu faktorizacii n P0 P1 P2 P3 P4 P5500 0 00147 0 00074 0 00050 0 00051 0 00095 0 006495000 0 01519 0 00777 0 00527 0 00453 0 00430 0 0097350000 0 15507 0 08203 0 05664 0 04843 0 04180 0 04413500000 1 60732 0 86254 0 61597 0 53825 0 47146 0 437875000000 16 47706 9 00177 6 57146 5 83518 5 27427 4 88251 S uvelicheniem n sootnoshenie vremen stanovitsya vsyo bolshe v polzu resheta Eratosfena a na diapazone n 5000000 ono stabilno bystree pri lyubyh faktorizaciyah Dannyj fakt eshyo raz podtverzhdaet proigrysh v bystrodejstvii resheta Pitcharda iz za slozhnyh vychislenij Sm takzheResheto Sundarama Resheto Atkina angl KorekursiyaPrimechaniyaNikomah Gerasskij Vvedenie v arifmetiku I XIII 2 po grecheski po russki Arhivnaya kopiya ot 1 aprelya 2022 na Wayback Machine Hoche R Nicomachi Geraseni Pythagorei Introductionis Arithmeticae libri II Lipsiae neopr ed 1866 Horsley Rev Samuel F R S Koskinon Eratos8enoys or The Sieve of Eratosthenes Being an Account of His Method of Finding All the Prime Numbers Philosophical Transactions 1683 1775 Vol 62 1772 pp 327 347 Arhivnaya kopiya ot 2 oktyabrya 2018 na Wayback Machine Depman I Ya Istoriya arifmetiki Posobie dlya uchitelej M Prosveshenie 1965 S 133 34 000 ekz Sedgewick Robert Algorithms in C neopr Addison Wesley 1992 ISBN 0 201 51059 6 p 16 Jonathan Sorenson An Introduction to Prime Number Sieves Computer Sciences Technical Report 909 Department of Computer Sciences University of Wisconsin Madison January 2 1990 the use of optimization of starting from squares and thus using only the numbers whose square is below the upper limit is shown Pritchard Paul Linear prime number sieves a family tree Sci Comput Programming 9 1 1987 pp 17 35 Strogo govorya vnutrennij cikl vypolnyaetsya dlya kazhdogo prostogo p P p n displaystyle p in mathbb P colon p leq sqrt n no O log log n displaystyle O log log n O log log n displaystyle O log log sqrt n poetomu tradicionno dlya kratkosti kvadratnyj koren opuskayut Hardy and Wright An Introduction to the Theory of Numbers p 349 O Neill Melissa E The Genuine Sieve of Eratosthenes Arhivnaya kopiya ot 9 noyabrya 2017 na Wayback Machine Journal of Functional Programming Published online by Cambridge University Press 9 October 2008 doi 10 1017 S0956796808007004 Colin Runciman FUNCTIONAL PEARL Lazy wheel sieves and spirals of primes Journal of Functional Programming Volume 7 Issue 2 March 1997 takzhe zdes Arhivnaya kopiya ot 19 oktyabrya 2012 na Wayback Machine Turner David A SASL language manual Tech rept CS 75 1 Department of Computational Science University of St Andrews 1975 primes sieve 2 sieve p nos p sieve remove multsof p nos remove m filter not m multsof p n rem n p 0 Crandall amp Pomerance Prime Numbers A Computational Perspective second edition Springer 2005 pp 121 24 Bays Carter Hudson Richard H The segmented sieve of Eratosthenes and primes in arithmetic progressions to 1012 angl BIT journal 1977 Vol 17 no 2 P 121 127 doi 10 1007 BF01932283 J Sorenson The pseudosquares prime sieve Arhivnaya kopiya ot 17 oktyabrya 2012 na Wayback Machine Proceedings of the 7th International Symposium on Algorithmic Number Theory ANTS VII 2006 David Gries Jayadev Misra A Linear Sieve Algorithm for Finding Prime Numbers 1978 Peng T A Fall 1985 One Million Primes Through the Sieve BYTE pp 243 244 Data obrasheniya 19 marta 2016 Paul Pritchard A sublinear additive sieve for finding prime numbers Communications of the ACM 24 1981 18 23 MR 600730 Paul Pritchard Fast compact prime number sieves among others Journal of Algorithms 4 1983 332 344 MR 729229 Paul Pritchard Explaining the wheel sieve Acta Informatica 17 1982 477 485 MR 685983 A O L ATKIN AND D J BERNSTEIN PRIME SIEVES USING BINARY QUADRATIC FORMS MATHEMATICS OF COMPUTATION Arhivirovano 24 dekabrya 2017 goda Meertens Lambert Calculating the Sieve of Eratosthenes Journal of functional programming V A Minaev N P Vasilev V V Lukyanov S A Nikonov D V Nikerov http vestnik rosnou ru pdf n4y2013 p29 pdf INDEKSNYE ALGORITMY VYChISLENIYa PROSTYH ChISEL S ISPOLZOVANIEM METODA KOLCEVOJ FAKTORIZACII VESTNIK 2013 4 S 29 Arhivirovano 22 dekabrya 2017 goda Jonathan Sorenson An Analysis of Two Prime Number Sieves Computer Sciences Department University of Wisconsin Madison S 8 10 V A Minaev N P Vasilev V V Lukyanov S A Nikonov D V Nikerov http vestnik rosnou ru pdf n4y2013 p29 pdf INDEKSNYE ALGORITMY VYChISLENIYa PROSTYH ChISEL S ISPOLZOVANIEM METODA KOLCEVOJ FAKTORIZACII VESTNIK 2013 4 S 30 31 Arhivirovano 22 dekabrya 2017 goda V A Minaev N P Vasilev V V Lukyanov S A Nikonov D V Nikerov http vestnik rosnou ru pdf n4y2013 p29 pdf INDEKSNYE ALGORITMY VYChISLENIYa PROSTYH ChISEL S ISPOLZOVANIEM METODA KOLCEVOJ FAKTORIZACII VESTNIK 2013 4 S 30 33 Arhivirovano 22 dekabrya 2017 goda Jonathan Sorenson An Analysis of Two Prime Number Sieves Computer Sciences Department University of Wisconsin Madison S 16 18 Jonathan Sorenson An Analysis of Two Prime Number Sieves Computer Sciences Department University of Wisconsin Madison S 16 Jonathan Sorenson An Analysis of Two Prime Number Sieves Computer Sciences Department University of Wisconsin Madison S 17 LiteraturaEratosfenovo resheto Elokvenciya Yaya M Sovetskaya enciklopediya 1957 S 141 Bolshaya sovetskaya enciklopediya v 51 t gl red B A Vvedenskij 1949 1958 t 49 Galperin G Prosto o prostyh chislah Kvant 1987 4 S 10 14 38 Neopublikovannye materialy L Ejlera po teorii chisel RAN Institut istorii estestvoznaniya i tehniki S Peterb fil Sost Matvievskaya G P i dr Otv red Nevskaya N I SPb Nauka 1997 ISBN 5 02 024847 9 Prof D F Egorov Elementy teorii chisel Gosudarstvennoe izdatelstvo Moskva 1923 nedostupnaya ssylka Kordemskij B A Matematicheskaya smekalka M GIFML 1958 576 s SsylkiImeetsya vikiuchebnik po teme Resheto Eratosfena Resheto Eratosfena ot M Gardnera Algoritm sostavleniya tablicy prostyh chisel ot zadannogo do drugogo chisla Realizaciya algoritma poiska prostyh chisel na Java Dokazatelstvo slozhnosti algoritma Eshe raz o poiske prostyh chisel

