Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы вокруг нас.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
13.11 Mб
Скачать

§ 5. Решето Эрагосфена

Целые положительные числа, отличные от единицы, которые без остатка делятся только на единицу и на самих себя, называются простыми. Первым из таких чисел яв­ляется 2. Все остальные четные числа уже не будут про­стыми, так как допускают деление без остатка на 2 (а не только на 1 и на себя). Нетрудно указать и еще несколько простых чисел: 3, 5, 7, 11, 13.

Древнегреческий ученый Эратосфен (III—II вв. до н. э.) предложил способ получения простых чисел, не пре­восходящих заданного числа п. Этот способ можно описать в виде следующего алгоритма Эратосфена.

1. Выписать последовательные целые числа, начиная с 2 и кончая числом п. Перейти к п. 2.

2. Считать, что р является именем числа 2. Перейти к п. 3.

3. Если р2≤n, то перейти к п. 4, иначе перейти к п. 6.

4. Начиная с числа р+1 в последовательности чисел зачеркнуть (не отбрасывая его и не обращая внимания на то, было ли оно уже зачеркнуто) каждое р-е число. Перей­ти к п. 5.

5. Первое после р незачеркнутое число последователь­ности считать новым значением имени р. Вернуться к п. 3.

6. Процесс окончен. Все незачеркнутые числа последовательности являются простыми.

Обосновать корректность алгоритма Эратосфена не­трудно. Каждое р-е число, если считать начиная с kp+1 (где k — целое положительное), равно kр+р= (k+1)p - Кроме числа р, которое имеет вид р = 1*р, мы вычеркиваем последовательно все числа 2-р, 3-р, …, которые не пре­восходят заданного числа n.

Выбирая первое после р незачеркнутое число, мы, естественно, находим новое наименьшее из простых чисел, превосходящих р, потому что оно не делится на р и на все меньшие его простые числа, а делится только на себя и на единицу (на большее число деление без остатка не­возможно, а на меньшее число оно не делится, так как ес­ли бы оно имело простой делитель, то было бы вычеркнуто, а если бы имело непростой делитель, то каждый простой делитель этого непростого делителя был бы также его дели­телем, т. е. опять-таки оно оказалось бы зачеркнутым).

Остается только убедиться в том, что, прекращая про­цесс после того, как получено простое число р, которое не удовлетворяет условию р2≤n, т. е. такое, что р2>n, мы не оставляем среди оставшихся чисел ни одного состав­ного. Но это понятно, потому что если бы среди оставших­ся было хотя бы одно непростое, то оно не могло бы иметь делителя, меньшего чем р (так как все числа, имеющие делитель, равный простому числу, меньшему чем р, уже зачеркнуты). Не может оно быть равно и р*р=р2, так как р2 больше п. Значит, оно должно быть произведением чисел, из которых хотя бы одно больше р, а другое не меньше р. Это невозможно, так как такое число больше р2, а значит, и больше n, у нас же могут быть только числа, которые меньше или равны п.

Читатель без труда и довольно быстро может убедиться в том, что простыми числами, не превосходящими 100, являются: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97. Для получения этого ряда простых чисел нам пришлось выполнять про­цесс для р=2, р=3, р=5, р=7. Уже р = 11 дало 112=121>100, что послужило сигналом для прекращения про­цесса. Как видит читатель, отбросив числа, делящиеся на первые 4 простых числа, мы получили 25 простых чисел, среди которых наибольшее 97.

В алгоритме Эратосфена мы встречаемся со случаем, в котором в процессе выполнения алгоритма получается очень большой промежуточный результат (последователь­ность п —- 1 чисел, начинающаяся с числа 2). Слово «боль­шой» здесь надо понимать в смысле числа символов, ко­торые необходимо хранить в течение некоторого времени. Но это число для каждого п конечно, и потому алгоритм Эратосфена потенциально осуществим для любого п, хотя автор не советует читателю применять его к числу n = 1 000 000000 (1 млрд.). Не хватит ни бумаги, ни времени.

Как уже упоминалось, в простейших случаях алгорит­мический процесс состоит из очень простых шагов. Но мож­но ли считать простым такой шаг, как выписывание по­следовательности п — 1 чисел при больших значениях n? Или отсчитывание р чисел начиная с (р + 1)-го при боль­ших значениях р? А ведь значения р могут быть как угод­но велики (доказано, что среди простых чисел не г наиболь­шего; после каждого простого числа можно найти еще большее простое число).

Многие специалисты по теории алгоритмов считают, что такие шаги алгоритмического процесса недопустимы. С их точки зрения алгоритм Эратосфена не является алго­ритмом, хотя и служит правилом для получения простых чисел. В чем же возражение против шагов, на которых могут преобразовываться объекты, состоящие хотя и из конечного, но не ограниченного числа символов? В том, что умственные способности исполнителя ограничены и поэтому ему доступны только операции ограниченной сложности. Возражение, конечно, резонное. Но для него существует и контрвозражение. Если мы абстрагируемся от ограниченности ресурсов времени и материалов (напри­мер, бумаги и карандашей), то почему бы не абстрагиро­ваться и от ограниченности наших умственных ресурсов? Ведь можно создавать все более и более мощные вычисли­тельные машины так, что благодаря их использованию с течением времени наши умственные способности будут совершенствоваться и когда-нибудь наступит такой мо­мент, что алгоритмический процесс, который мы прежде не могли осуществить, станет легко осуществимым.

Автор считает это контрвозражение уважительным и не согласен с определением простоты действия, основанным на отрицании потенциальной возможности выполнять действия над объектами, образованными из сколь угодно большого (но конечного) числа символов.

Если нам известен алгоритм, определяющий действие, то это действие потенциально осуществимо, и поэтому нет никакого основания считать его слишком сложным. Дру­гое дело, если какое-либо действие не является потенци­ально осуществимым. Но об этом речь будет впереди (см. § 1 гл. 8).

Ну, а как же с алгоритмом Эратосфена? Мы с вами, читатель, будем его признавать алгоритмом. А тем, кто с этим не согласится, предоставим право его преобразовать так, чтобы на каждом шаге выполнялось только очень простое действие.