Научная статья на тему 'О сложности построения таблицы простых чисел на машине Тьюринга'

О сложности построения таблицы простых чисел на машине Тьюринга Текст научной статьи по специальности «Математика»

CC BY
266
27
i Надоели баннеры? Вы всегда можете отключить рекламу.
Область наук
Ключевые слова
МАШИНА ТЬЮРИНГА / СЛОЖНОСТЬ / ПРОСЕИВАНИЕ / TURING MACHINE / COMPLEXITY / SIEVING

Аннотация научной статьи по математике, автор научной работы — Сергеев Игорь Сергеевич

Доказывается, что сложность построения таблицы простых чисел от 1 до n на многоленточной машине Тьюринга равна O(n log n).

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

On the complexity of computing prime tables on the Turing machine

It is proved that the complexity of computing the table of primes up to n on a multitape Turing machine is O(n log n).

Текст научной работы на тему «О сложности построения таблицы простых чисел на машине Тьюринга»

2016 Вычислительные методы в дискретной математике № 1(31)

ВЫЧИСЛИТЕЛЬНЫЕ МЕТОДЫ В ДИСКРЕТНОЙ МАТЕМАТИКЕ

УДК 519.71

О СЛОЖНОСТИ ПОСТРОЕНИЯ ТАБЛИЦЫ ПРОСТЫХ ЧИСЕЛ

НА МАШИНЕ ТЬЮРИНГА1

И. С. Сергеев ФГУП «НИИ «Квант», г. Москва, Россия

Доказывается, что сложность построения таблицы простых чисел от 1 до n на

многоленточной машине Тьюринга равна O(n log n).

Ключевые слова: машина Тьюринга, сложность, просеивание. DOI 10.17223/20710410/31/8

ON THE COMPLEXITY OF COMPUTING PRIME TABLES ON THE

TURING MACHINE

I. S. Sergeev

Technology Federal State Unitary Enterprise "Research Institute Kvant", Moscow, Russia

E-mail: isserg@gmail.com

It is proved that the complexity of computing the table of primes up to n on a multitape

Turing machine is O(n log n).

Keywords: Turing machine, complexity, .sieving.

Введение

Составление таблицы простых чисел является необходимым предварительным этапом в современных алгоритмах факторизации [1]; среди других известных приложений можно указать вычисление факториалов [2, §6.5].

Для теоретической оценки сложности обычно используется вычислительная модель log-RAM (т. е. RAM-программа, выполняющая арифметические действия с аргументами длины O(logn) за время O(1), где n — размер входа, [3, 4]), адекватная предполагаемой реализации на стандартных компьютерах. Лучшая известная оценка сложности построения таблицы простых, не превосходящих n, в этой модели составляет O(n/ log log n) [5] (см. также [1, §3.2]).

Модель многоленточной машины Тьюринга (ММТ) служит универсальным средством анализа вычислительных алгоритмов, вне предположения об определённом способе реализации.

С понятием ММТ можно познакомиться в [2, 3]. Неформально говоря, ММТ состоит из нескольких (т.е. O(1)) потенциально бесконечных лент двоичных символов

1 Работа поддержана грантом РФФИ № 14-01-00671а.

с подвижными указателями и процессора, выполняющего элементарные инструкции. Процессор использует ленты в качестве памяти. К инструкциям относятся: сдвиг указателя на одну позицию влево или вправо, чтение символа из указанной ячейки, запись символа в указанную ячейку, бинарная булева операция над двумя прочитанными символами, условная операция (выбор одного из двух действий в зависимости от значения прочитанного символа). Сложность измеряется числом инструкций.

Замечание 1. На самом деле, функциональность машины Тьюринга как абстрактной модели вычислений шире. Приведённое описание апеллирует к осуществлённым реализациям машины Тьюринга, например в [2].

А. Шенхаге [2] адаптировал решето Эратосфена и при помощи адаптированного алгоритма оценил сложность P(n) построения таблицы простых как O(n log n log log n) с замечанием, что оценка может быть улучшена при более аккуратном анализе алгоритма. Для цели работы [2]—вычисления n! со сложностью O(M(n log n)) —такой оценки было достаточно, пока для сложности M(n) умножения n-разрядных чисел не были получены оценки вида M(n) = o(n log n log log n).

Авторы работы [6] переложили на машины Тьюринга метод [7], основанный на специальном «квадратичном» решете, и доказали оценку O(n log2 n/ log log n).

В действительности аккуратный анализ позволяет для метода [2] получить оценку O(nlog2 n) — такую же, как для простой версии метода [6]. А приём исключения повторного учёта чисел с малыми простыми делителями, предложенный П. Притчардом [5] (см. также [1, §3.2]), позволяет понизить сложность до O (n log2 n/ log log n) — как и в методе [6].

В работе [6] предложен ещё один метод с оценкой сложности P(n) = O(M(nlog n)). Метод может давать преимущество в предположении M(n) = o(n log n) (но справедливость такого предположения сегодня представляется маловероятной).

В настоящей работе устанавливается оценка P(n) = O(nlog n). Из неё, в частности, следует, что сложность построения таблицы составных чисел от 1 до n равна 0(n log n). Ещё один вывод: построение таблицы простых не влияет на порядок сложности вычисления n!, который очевидно (из размерности задачи) не меньше n log n.

1. Общая схема вычислений

Решето Эратосфена и решето [7] в методах [2, 6] приводят к завышенным оценкам сложности вследствие многократного опробования одних и тех же составных чисел. В этом отношении, следуя [5] (см. также [1, §3.2]), выгодно взять за основу неизбыточный способ перечисления составных, предложенный Мэрсоном [8].

Будем обозначать через pi последовательные простые числа: pi = 2, p2 = 3 и т.д. Процедура Мэрсона позволяет выписать все составные числа в заданном интервале, избегая повторений, а именно: для каждого i строится цепочка Ci чисел Ci,j = kj • pi, не кратных простым числам, меньшим pi. Множители kj определяются из результатов

предшествующего просеивания условием kj ^ (J CV.

i'<i

По существу, предлагаемый далее алгоритм является адаптацией алгоритма из [1, §3.2], основанного на идеях [5, 8].

В n ячейках одной из лент ММТ мы формируем признаки простоты чисел от 1 до n. В начальный момент времени лента заполнена нулями, в конце алгоритма ноль в позиции k означает, что число k простое, единица — что составное.

Последовательно увеличивая индекс i, выполняем проход ленты, проставляя единицы в позициях Ci,j. Поскольку просмотр всей ленты требует O(n) операций, то с ро-

стом i мы вынуждены просматривать всё более короткие начальные отрезки ленты, длина которых тем не менее позволяет корректно сформировать множество множителей kj для следующего шага.

По мере вычислений цепочки (упорядоченные списки) Ci записываются на другие ленты ММТ. Далее выполняется стандартная процедура попарного слияния цепочек в сортированные списки до тех пор, пока общее число списков не станет меньше log n. Чтобы уменьшить стоимость сравнений при сортировке, списки хранятся и обрабатываются в сжатом виде. В конце концов, каждый список отображается на ленту признаков простоты.

2. Основной результат

В рассуждениях ниже используются стандартные факты, связанные с распределением простых чисел — их можно найти, например, в [9, 10]. Как обычно, функция n(n) обозначает число простых чисел, не превосходящих n.

Теорема 1. Сложность построения таблицы простых чисел от 1 до n равна O(n log n).

Доказательство. Сделаем несколько предварительных замечаний.

При движении указателя по ленте обычно требуется обновлять номер позиции указателя. Поэтому напомним, что прибавление или вычитание единицы в среднем выполняется за O(1) битовых операций: в половине случаев изменяется только младший разряд, в 1/4 случаев — два младших разряда, в 1/8 случаев — три разряда и т.д.

При движении к позиции с заданным номером попутно требуется выполнять сравнение текущего номера с заданным. Такое сравнение в среднем также выполняется со сложностью O(1): в половине случаев достаточно выполнить сравнение младших разрядов (если они отличаются), в 1/4 случаев — сравнить два разряда и т. д.

Перейдём к изложению собственно алгоритма.

0) На ленте T в конце работы программы будут сформированы 1-битные признаки a(k) простоты чисел k. При первом заполнении ленты а(2) = ... = a(n) = 0.

1) Для каждого простого числа pi ^ log n выполняем проход ленты T и запись a(kpi) = 1, k > 1. При этом само число pi определяется как позиция i-го нулевого бита. При движении по ленте отслеживаем значение номера позиции по модулю pi, т. е. при сдвиге указателя инкрементируем текущий номер и сравниваем его с pi. Если получаем равенство, то записываем единицу в ячейку и обнуляем номер. Сложность этого шага равна O(n ■ n(log n)) = O(n log n/ log log n).

2) Для каждого из последующих простых чисел pi, log n < pi ^ -y/n, просматриваем только первые n/pi позиций ленты. Номером i-й нулевой позиции определяется само число pi. Продолжая движение по ленте, выполняем два действия. Во-первых, переписываем на другую ленту последовательность Ci составных чисел kpi, не кратных простым числам, меньшим pi. В качестве критерия принадлежности числа последовательности используется условие a(k) = 0, где k ^ pi. Во-вторых, записываем единицы в позиции с номерами, кратными pi.

При записи цепочки составных чисел применяем сжатие. Для этого разобьём простые числа на группы: к j-й группе отнесём числа p Е [2j, 2j+1). Цепочку составных, относящихся к простому числу из j-й группы, разбиваем (с точностью до округления) на n2-2j секций: в одной секции располагаются числа, отличающиеся лишь младшими 2j разрядами. (Здесь и ниже опускаем округления в формулах, если они не влияют на результаты, в целях наглядности изложения.) Старшие logn — 2j разрядов числа определяются номером секции. Поэтому для записи очередного числа цепочки мы ис-

пользуем младших битов, размещая его в подходящей секции. Технически при записи последовательности можно использовать разделяющие биты: единицами отделять секции, нулями — числа внутри секции.

В цепочке С содержится по порядку не более

п п (1 - - ^ п

Pi j=A Pj) Pi log Pi

чисел (равенство выполнено согласно известному результату Чебышева — Мертенса); знак х обозначает равенство по порядку. Вычисления выполняются так: при просмотре ленты T фиксируются разности между позициями соседних нулей. По достижении позиции с нулём накопленная разность s умножается на pi. Такое умножение методом сдвигов и сложений легко выполнить за O(logpi • log s) операций, если знать длину числа s (длину s удобно фиксировать на отдельной ленте). Сумма логарифмов t величин, суммарно не превосходящих th, не превосходит t log h (сумма максимальна, когда все величины приблизительно равны). Поэтому сложность умножений можно оценить сверху, подставив вместо s среднее значение разности, равное по порядку logpi. Получаем оценку сложности порядка O(n log log pi/pi).

Наконец, сложность построения нового члена цепочки, т. е. прибавления найденной разности к предыдущему члену и добавления нового члена в цепочку, можно (грубо) оценить как O(log n).

Суммируя по всем индексам i, сложность этапа можно оценить сверху величиной порядка

n(Vn) loglog pi n(Vn) 1 n Y1 -- + n log n Y1 -i- х n log n/ loglog n.

i=n(logn)+1 pi i=n(logn)+1 pi logpi

3) В результате предыдущего шага построено около п^у^) упорядоченных списков составных чисел, включающих в совокупности порядка

n(Vn) 1 n Y1 -i- х n/ log log n

i=n(logn)+1 pi logpi

членов. Эти списки отнесены к примерно (1/2) log n группам (см. выше)—для списков одной группы используется одна и та же формула сжатия. Выполним сортировку внутри каждой группы. По построению, j-я группа содержит порядка 2j/j списков и порядка

n(2j+!) 1

n Е —;-х n/j 2

i=n(2j) + 1 Pi log Pi

чисел. Деревом слияний [11, §5.4] эти списки упорядочиваются за O(n/j) операций сравнения и перезаписи, каждая эквивалентна O(j) битовым операциям. (Сортировка s списков с суммарным числом N элементов выполняется за O(N log s) операций сравнения и чтения/записи — для этого достаточно трёх лент ММТ [11, 2].)

Общая сложность этапа оценивается как O(n log n) —по O(n) для каждой группы. Отметим, что сжатие позволило понизить сложность сравнения в j-й группе с O(log n) до O(j) и порядок сложности этапа —с nlognloglogn до nlogn.

4) Для каждого из полученных на предыдущем этапе списков S выполняем обновление ленты T, т.е. проставление a(k) = 1, если k Е S. Операция выполняется за один

просмотр списка и один проход по ленте со сложностью O(n). Таким образом, общая сложность этапа — O (n log n).

5) После предыдущего шага лента T полностью сформирована: нули стоят строго в позициях с простыми номерами. Выписать последовательность простых чисел теперь можно за один просмотр ленты со сложностью порядка n(n) log n + n х n. ■

ЛИТЕРАТУРА

1. Крэндалл Р., Померанс К. Простые числа: криптографические и вычислительные аспекты. М.: УРСС: Либроком, 2011. 664 с.

2. Schönhage A., Grotefeld A. F. W., and Vetter E. Fast Algorithms: a Multitape Turing Machine Implementation. Mannheim, Leipzig, Wien, Zürich: BI-Wissenschaftsverlag, 1994. 298 p.

3. Ахо А., ХопкрофтДж., Ульман Дж. Построение и анализ вычислительных алгоритмов. М.: Мир, 1979. 536 с.

4. Fürer M. How fast can we multiply large integers on an actual computer? arXiv:1402.1811. 2014.

5. PritchardP. A sublinear additive sieve for finding prime numbers // Comm. ACM. 1981. V. 24. No. 1. P. 18-23.

6. Farach-Colton M. and Tsai M.-T. On the complexity of computing prime tables. arXiv:1504. 05240. 2015.

7. AtkinA.O.L. and Bernstein D. J. Prime sieves using binary quadratic forms // Math. Comput. 2004. V. 73. No. 246. P. 1023-1030.

8. Mairson H. G. Some new upper bounds on the generation of prime numbers // Comm. ACM. 1977. V. 20. No. 9. P. 664-669.

9. Rosser J. and Schoenfeld L. Approximate formulas for some functions of prime numbers // Ill. J. Math. 1962. V.6. P. 64-94.

10. Sandor J., Mitrinovic D. S., and Crstici B. Handbook of Number Theory. I. Dordrecht: Springer, 2006. 622 p.

11. Кнут Д. Искусство программирования. Т. 3. Сортировка и поиск. М.: Вильямс, 2008. 832 c.

REFERENCES

1. Crandall R. and Pomerance C. Prime Numbers. A Computational Perspective. Springer, 2005. 597 p.

2. Schonhage A., Grotefeld A. F. W., and Vetter E. Fast Algorithms: a Multitape Turing Machine Implementation. Mannheim, Leipzig, Wien, Zürich, BI-Wissenschaftsverlag, 1994. 298 p.

3. Aho A., Hopcroft J., and Ullman J. The Design and Analysis of Computer Algorithms. Addison-Wesley Longman Publishing Co., Inc. Boston, MA, USA, 1974.

4. Fürer M. How fast can we multiply large integers on an actual computer? arXiv:1402.1811. 2014.

5. Pritchard P. A sublinear additive sieve for finding prime numbers. Comm. ACM, 1981, vol. 24, no. 1, pp.18-23.

6. Farach-Colton M. and Tsai M.-T. On the complexity of computing prime tables. arXiv:1504. 05240. 2015.

7. Atkin A. O. L. and Bernstein D. J. Prime sieves using binary quadratic forms. Math. Comput., 2004, vol. 73, no. 246, pp. 1023-1030.

8. Mairson H. G. Some new upper bounds on the generation of prime numbers. Comm. ACM, 1977, vol. 20, no. 9, pp. 664-669.

9. Rosser J. and Schoenfeld L. Approximate formulas for some functions of prime numbers. 111. J. Math., 1962, vol.6, pp. 64-94.

10. Sandor J., Mitrinovic D. S., and Crstici B. Handbook of Number Theory. I. Dordrecht, Springer, 2006. 622 p.

11. Knuth D. E. The Art of Computer Programming. Vol.3. Sorting and Searching. Reading, Massachusetts, Addison-Wesley, 1998.

i Надоели баннеры? Вы всегда можете отключить рекламу.