Тест Агравала — Каяла — Саксены
Тест Аграва́ла — Кая́ла — Саксе́ны (тест AKS) — единственный известный на данный момент универсальный (то есть применимый ко всем числам) полиномиальный, детерминированный и безусловный (то есть не зависящий от недоказанных гипотез) тест простоты чисел, основанный на обобщении малой теоремы Ферма на многочлены.
Формулировка
[править | править код]Если существует такое, что и для любого от 1 до выполняется сравнение ,
то — либо простое число, либо степень простого числа.
Здесь и далее обозначает показатель числа по модулю , — двоичный логарифм и — функция Эйлера[1].
Сравнение по двум модулям вида
для многочленов означает, что существует такой, что все коэффициенты многочлена кратны , где — кольцо многочленов от над целыми числами[1].
История
[править | править код]Тест AKS был предложен индийским учёным Мани́ндрой Аграва́лом[англ.] и его двумя студентами Ни́раджем Кая́лом[англ.] и Нити́ном Саксе́ной[англ.] Индийского технического института Канпура[англ.] и впервые опубликован 6 августа 2002 года[2]. До этой публикации принадлежность задачи распознавания простоты классу P являлась открытой проблемой.
Вычислительная сложность изначального алгоритма оценивается как . В предположении верности гипотезы Артина, время выполнения улучшается до . В предположении верности гипотезы Софи Жермен время также стремится к [2].
В 2005 году Ленстра и Померанс опубликовали улучшенный вариант алгоритма с вычислительной сложностью , где — проверяемое тестом число[3][4].
Согласно гипотезе Агравала существует вариант алгоритма с временем выполнения , но Ленстра и Померанс привели эвристический аргумент, подтверждающий ложность этой гипотезы[2].
Данный алгоритм имеет важное теоретическое значение, но на практике не применяется, так как его вычислительная сложность значительно выше, чем у лучших вероятностных алгоритмов[5]. За своё открытие авторы получили премию Гёделя и премию Фалкерсона в 2006 году[6].
Основные свойства
[править | править код]Основное свойство алгоритма заключается в том, что он одновременно универсален, полиномиален, детерминирован и безусловен[5], предыдущие алгоритмы обладали максимум лишь тремя из этих четырёх свойств.
Универсальность теста означает, что он может использоваться для проверки простоты любых чисел. Многие быстрые тесты предназначены для проверки чисел из ограниченного множества. Например, тест Люка — Лемера работает только для чисел Мерсенна, а тест Пепина применим лишь к числам Ферма[6].
Полиномиальность означает, что наибольшее время работы алгоритма ограничено многочленом от количества цифр в проверяемом числе. При этом такие тесты, как тест эллиптических кривых (ECPP) и тест Адлемана — Померанса — Румели (APR), могут доказать или опровергнуть простоту числа, но для них не доказано, что время работы будет полиномиальным для любого входного числа[6].
Детерминизм гарантирует получение уникального предопределённого результата. Вероятностные тесты, такие, как тест Миллера — Рабина и тест Бейли — Померанца — Селфриджа — Уогстаффа, могут проверить простоту числа за полиномиальное время, но при этом дают лишь вероятностный ответ[6].
Безусловность — свойство, заключающееся в том, что корректность алгоритма не зависит от каких-либо недоказанных гипотез. Этим свойством не обладает, например, Тест Миллера, который хоть и детерминирован и работает за полиномиальное время для любого входного числа, но его корректность зависит от недоказанной обобщённой гипотезы Римана[6].
Основная идея
[править | править код]Основной идеей алгоритма является обобщение малой теоремы Ферма на многочлены, утверждающее, что для всех (где кольцо взято без обратных элементов по умножению и нулевого элемента) и , — простое тогда и только тогда, когда[2][7][8]:
-
1
Иными словами, если , , и НОД, то простое тогда и только тогда, когда выполнено условие (1).
На проверку этого выражения требуется время, оцениваемое в , поскольку в худшем случае следует оценить коэффициентов в левой части. Для сокращения числа коэффициентов и сложности вычислений было выбрано такое , чтобы использовать в качестве теста на простоту выражение[2]:
которое получается делением обеих частей исходного выражения на [7].
Здесь количество подлежащих проверке значений и значение уже ограничены многочленом от [8].
В этом случае вместо факторкольца рассматривается поле , где — неприводимый делитель над конечным полем , отличный от . Оценивается число многочленов этого поля, для которых выполняется сравнение:
Алгоритм и его модификация
[править | править код]- Ввод: целое число .
- Если для целых чисел и , вернуть «составное».
- Найдем наименьшее , такое что .
- Если НОД для некоторого , вернуть «составное».
- Если , вернуть «простое».
- Если для всех от 1 до верно, что , вернуть «простое».
- Иначе вернуть «составное».
Агравалом, Каялом и Саксеной доказано, что алгоритм вернёт «простое» тогда и только тогда, когда — простое число.
Ленстра и Померанс опубликовали улучшенный вариант алгоритма[8][4]:
- Ввод: ,
- Если для и целого , вернуть «составное».
- Найдем наименьшее такое что .
- Если НОД для любого , вернуть «составное».
- Если для всех от 1 до верно, что , вернуть «простое».
- Иначе вернуть «составное».
Здесь функция — та же, — многочлен степени, большей , такой, что при некоторых дополнительных условиях[1][8].
Вычислительная сложность этого алгоритма — .
Обоснование
[править | править код]В обосновании используется группа — группа всех чисел, которые являются вычетами по модулю для чисел из набора[9]:
Данная подгруппа, назовём её группой , уже содержит . Группа порождена по модулю , и так как , то .
Вторая группа, используемая в доказательстве, , является множеством всех вычетов многочленов в (пространстве простых чисел) по модулю и . Эта группа порождена элементами в поле и является подгруппой мультипликативной группы поля [9].
Основные промежуточные леммы и определения, используемые в обосновании алгоритма[2]:
- Пусть , , и НОД. Тогда является простым тогда и только тогда, когда
- Пусть НОК обозначает наименьшее общее кратное первых чисел. Тогда для справедливо неравенство:
- НОК
- Существует такое, что , такое что .
- Определение. Для многочлена и числа , говорится что включено в , если .
- Если числа и включены в , то их произведение также включено.
- Если число включено в и , то так же включено в .
- Лемма Ленстры. .
- Если не является степенью , то .
Практическое применение
[править | править код]При оценке параметра алгоритм требует 1 000 000 000 Гб (гигабайт) памяти для чисел из 1024 бит. Для современных операционных систем это слишком большой объём информации. В предположении верности гипотезы Артина и гипотезы Софи Жермен о плотности множества простых чисел для алгоритма будет достаточно значения параметра , оцениваемого в . В этом случае будет достаточно 1 Гб памяти. Но пока верность этих гипотез не доказана, алгоритм не применяется ввиду сложного исполнения. Дональд Кнут, поместивший алгоритм во второй том Искусства программирования (издание 3), в частной переписке отметил его чисто теоретический характер[6].
Примечания
[править | править код]- ↑ 1 2 3 Агафонова, 2009.
- ↑ 1 2 3 4 5 6 Agrawal, Kayal, Saxena, 2004.
- ↑ H. W. Lenstra Jr. and Carl Pomerance, «Primality Testing with Gaussian Periods Архивная копия от 28 апреля 2021 на Wayback Machine», preliminary version July 20, 2005.
- ↑ 1 2 H. W. Lenstra Jr. and Carl Pomerance, «Primality testing with Gaussian periods Архивная копия от 25 февраля 2012 на Wayback Machine», version of April 12, 2011.
- ↑ 1 2 Бараш, 2005.
- ↑ 1 2 3 4 5 6 Cao, Liu, 2014.
- ↑ 1 2 Menon, 2007, pp. 10—11.
- ↑ 1 2 3 4 Salembier, Southerington, 2005.
- ↑ 1 2 Agrawal, Kayal, Saxena, 2004, p. 5.
Литература
[править | править код]- Бараш Л. Ю. Алгоритм AKS проверки чисел на простоту и поиск констант генераторов псевдослучайных чисел // Безопасность информационных технологий. — 2005. — № 2. — С. 27—38. Архивировано 18 октября 2014 года.
- Агафонова И. В. Проверка чисел на простоту: полиномиальный алгоритм // Семинар по дискретному гармоническому анализу и геометрическому моделированию. — 2009.
на английском языке
- Agrawal M., Kayal N., Saxena N. PRIMES is in P (англ.) // Annals of Mathematics / J. Bourgain — Princeton University, 2004. — Vol. 160, Iss. 2. — P. 781–793. — ISSN 0003-486X; 1939-8980 — doi:10.4007/ANNALS.2004.160.781
- R. Crandall, Apple ACG, J. Papadopoulos, On the implementation of AKS-class primality tests, 2003.
- Salembier R. G., Southerington P. An Implementation of the AKS Primality Test — 2005. — сравнение реализаций изначального алгоритма и алгоритма Ленстры с использованием различных библиотек.
- Zhengjun Cao, Lihua Liu. Remarks on AKS Primality Testing Algorithm and A Flaw in the Definition of P. — 2014. — arXiv:1402.0146v1.
- Granville A. It is easy to determine whether a given integer is prime (англ.) // Bulletin (new series) of the American Mathematical Society. / S. Friedlander — Providence: American Mathematical Society, 2005. — Vol. 42, Iss. 1. — P. 3—38. — ISSN 0273-0979; 1088-9485 — doi:10.1090/S0273-0979-04-01037-7
- Agrawal, M. and Kayal, N. and Saxena, N. Polynomial time deterministic method for testing primality of numbers (англ.). Patent US 20050027764 A1. Дата обращения: 15 декабря 2013.
- Rotella C. An efficient implementation of the aks polynomial-time primality proving algorithm (англ.). — Pittsburgh, Pennsylvania, USA: School of Computer Science-Carnegie Mellon University, 2005.
- Vijay Menon. Deterministic Primality Testing — understanding the AKS algorithm (англ.) // CoRR. — 2007. — Vol. abs/1311.3785.
Ссылки
[править | править код]- Weisstein, Eric W. AKS Primality Test (англ.) на сайте Wolfram MathWorld. — краткая информация о тесте AKS
- Phil Carmody. The AKS «PRIMES in P» Algorithm Resource (англ.). Дата обращения: 19 октября 2014. — обзор материалов, посвящённых алгоритму
- Li, H. The Analysis and Implementation of the AKS Algorithm and Its Improvement Algorithms (англ.). — 2013.
- Pedro Berrizbetia. Sharpening «Primes is in P» for a large family of numbers. (англ.). — 2011.
Эта статья входит в число добротных статей русскоязычного раздела Википедии. |