AKS primality test
Тест простоты AKS (также известный как тест простоты Агравала-Кайала-Саксены и круговой тест AKS ) — это детерминированный доказательства простоты, алгоритм созданный и опубликованный Маниндрой Агравалом , Нираджем Каялом и Нитином Саксеной , учеными-компьютерщиками из Индийского технологического института Канпура. 6 августа 2002 г., в статье под названием «ПРАЙМЫ находятся в P». [1] Алгоритм был первым, который способен за полиномиальное время определить , является ли данное число простым или составным , не полагаясь при этом на математические догадки, такие как обобщенная гипотеза Римана . Доказательство также примечательно тем, что не опирается на область анализа . [2] В 2006 году авторы получили за свою работу премию Гёделя и премию Фулкерсона .
Важность
[ редактировать ]AKS — первый алгоритм доказательства простоты, который одновременно является общим , полиномиальным , детерминированным и безусловно правильным . Предыдущие алгоритмы разрабатывались веками и достигали максимум трех из этих свойств, но не всех четырех.
- Алгоритм AKS можно использовать для проверки простоты любого заданного общего числа. Известно множество быстрых тестов на простоту, которые работают только для чисел с определёнными свойствами. Например, критерий Люка-Лемера работает только для чисел Мерсенна , а критерий Пепена можно применять только к числам Ферма .
- Максимальное время работы алгоритма может быть ограничено полиномом от количества цифр в целевом числе. ECPP и APR убедительно доказывают или опровергают то, что данное число является простым, но неизвестно, имеют ли полиномиальные границы времени для всех входных данных.
- Алгоритм гарантированно определит , является ли целевое число простым или составным. Рандомизированные тесты, такие как Миллер-Рабин и Бэйли-PSW , могут проверить любое заданное число на простоту за полиномиальное время, но, как известно, дают только вероятностный результат.
- Корректность AKS не зависит от какой-либо дополнительной недоказанной гипотезы . Напротив, версия теста Миллера -Рабина Миллера полностью детерминирована и работает за полиномиальное время для всех входных данных, но ее правильность зависит от истинности еще не доказанной обобщенной гипотезы Римана .
Хотя алгоритм имеет огромное теоретическое значение, на практике он не используется, что делает его галактическим алгоритмом . Для 64-битных входных данных тест Бэйли-ПСВ является детерминированным и выполняется на много порядков быстрее. Для больших входных данных производительность тестов ECPP и APR (также безусловно правильных) намного превосходит AKS. Кроме того, ECPP может выводить сертификат простоты , который позволяет осуществлять независимую и быструю проверку результатов, что невозможно при использовании алгоритма AKS.
Концепции
[ редактировать ]Тест на простоту AKS основан на следующей теореме: Учитывая целое число и целое число взаимно простой с , является простым тогда и только тогда, когда полиномиальное отношение сравнения
( 1 ) |
выполняется внутри кольца полиномов . [1] Обратите внимание, что обозначает неопределенность , порождающую это кольцо полиномов.
Эта теорема является обобщением на полиномы малой теоремы Ферма . В одном направлении это можно легко доказать, используя биномиальную теорему вместе со следующим свойством биномиального коэффициента :
- для всех если является простым.
Хотя соотношение ( 1 ) само по себе представляет собой тест на простоту, его проверка занимает экспоненциальное время : подход грубой силы потребовал бы расширения полином и сокращение полученного коэффициенты.
Сравнение — это равенство в кольце многочленов . Вычисление в факторкольце создает верхнюю границу степени задействованных полиномов. AKS оценивает равенство в , что делает сложность вычислений зависимой от размера . Для ясности, [1] это выражается как соответствие
( 2 ) |
что то же самое, что:
( 3 ) |
для некоторых полиномов и .
Обратите внимание, что все простые числа удовлетворяют этому соотношению (выбирая в ( 3 ) дает ( 1 ), что справедливо для основной). Это сравнение можно проверить за полиномиальное время, если является полиномом по отношению к цифрам . Алгоритм AKS оценивает это соответствие для большого набора значения, размер которых полиномиален по разрядам . Доказательство валидности алгоритма AKS показывает, что можно найти и набор значения с указанными выше свойствами такие, что если сравнения выполнены, то есть степень простого числа. [1]
История и время работы
[ редактировать ]В первой версии цитируемой выше статьи авторы доказали, что асимптотическая временная сложность алгоритма равна (используя Õ из обозначения big O ) — двенадцатая степень количества цифр в n раз, полилогарифмическая по количеству цифр. Однако эта верхняя граница была довольно свободной; широко распространенная гипотеза о распределении простых чисел Софи Жермен , если бы она была верной, немедленно сократила бы худший случай до .
Через несколько месяцев после открытия появились новые варианты (Lenstra 2002, Pomerance 2002, Berrizbeitia 2002, Cheng 2003, Bernstein 2003a/b, Lenstra и Pomerance 2003), которые значительно увеличили скорость вычислений. Из-за существования множества вариантов Крэндалл и Пападопулос ссылаются на «класс AKS» алгоритмов в своей научной статье «О реализации тестов простоты класса AKS», опубликованной в марте 2003 года.
В ответ на некоторые из этих вариантов, а также на другие отзывы, статья «ПРАЙМЫ в P» была дополнена новой формулировкой алгоритма AKS и доказательством его корректности. (Эта версия в конечном итоге была опубликована в «Анналах математики» .) Хотя основная идея осталась прежней, r было выбрано по-новому, а доказательство правильности было организовано более последовательно. Новое доказательство опиралось почти исключительно на поведение круговых многочленов над конечными полями . Новая верхняя граница временной сложности составила , позже приведенный с использованием дополнительных результатов теории решета к .
В 2005 году Померанс и Ленстра продемонстрировали вариант АКС, работающий в операции, [3] что приведет к появлению еще одной обновленной версии статьи. [4] Агравал, Каял и Саксена предложили вариант, который будет работать в если бы гипотеза Агравала была верна; однако эвристический аргумент Померанса и Ленстры предполагает, что это, вероятно, неверно.
Алгоритм
[ редактировать ]Алгоритм следующий: [1]
- Входные данные: целое число n > 1 .
- Проверьте, ли n является полной степенью : если n = a б для целых чисел a > 1 и b > 1 выведите составной результат .
- Найдите наименьший r такой, что ord r ( n ) > (log 2 n ) 2 . Если r и n не являются взаимно простыми, выведите составной результат .
- Для всех 2 ≤ a ≤ min ( r , n −1) проверьте, что a не делит n : Если a | n для некоторых 2 ⩽ a ⩽ min ( r , n −1), затем выведите Composite .
- Если n ≤ r , выведите prime .
- Для а = 1 до делать
- если ( Икс + а ) н ≠ Х н + а (мод X р − 1, n ), затем вывести составной ;
- Выходное простое число .
Здесь ord r ( n ) — мультипликативный порядок по n модулю r , log 2 — двоичный логарифм , а является тотент-функцией Эйлера от r .
Шаг 3 показан в статье как проверка 1 < ( a , n ) < n для всех a ≤ r . Видно, что это эквивалентно пробному делению до r , которое можно сделать очень эффективно без использования gcd . Аналогичным образом, сравнение на шаге 4 можно заменить, если пробное деление возвращает простое число после проверки всех значений до
Если выйти за пределы очень небольших затрат, шаг 5 будет доминировать по затраченному времени. Существенное снижение сложности (от экспоненциальной до полиномиальной) достигается за счет выполнения всех вычислений в конечном кольце.
состоящий из элементы. Это кольцо содержит только мономы , а коэффициенты находятся в который имеет элементы, все они кодируются внутри биты.
Большинство более поздних улучшений, внесенных в алгоритм, были сосредоточены на уменьшении размера r, что ускоряет основную операцию на шаге 5, а также на уменьшении размера s , количества циклов, выполняемых на шаге 5. [5] Обычно эти изменения не меняют сложность вычислений, но могут привести к сокращению затрат времени на многие порядки; например, окончательная версия Бернштейна имеет теоретическое ускорение более чем в 2 миллиона раз.
Схема подтверждения действительности
[ редактировать ]Чтобы алгоритм был корректным, все шаги, определяющие n, должны быть корректными. Шаги 1, 3 и 4 тривиально корректны, поскольку основаны на прямых проверках делимости n . Шаг 5 также верен: поскольку (2) верно для любого выбора чисел , взаимно простых с n и r , если n простое, неравенство означает, что n должно быть составным.
Самая трудная часть доказательства — показать, что шаг 6 верен. Его доказательство корректности основано на верхних и нижних оценках мультипликативной группы в построенный из биномов ( X + a ), которые проверяются на шаге 5. Шаг 4 гарантирует, что эти биномы отдельные элементы . Для конкретного выбора r границы приводят к противоречию, если только n не является простым или степенью простого числа. Вместе с тестом шага 1 это означает, что на шаге 6 n всегда простое. [1]
Пример 1: n = 31 — простое число
[ редактировать ]Input: integer n = 31 > 1. (* Step 1 *) If (n = ab for integers a > 1 and b > 1), output composite. For ( b = 2; b <= log2(n); b++) { a = n1/b; If (a is integer), Return[Composite] } a = n1/2...n1/4 = {5.568, 3.141, 2.360} (* Step 2 *) Find the smallest r such that Or(n) > (log2 n)2. maxk = ⌊(log2 n)2⌋; maxr = Max[3, ⌈(Log2 n)5⌉]; (* maxr really isn't needed *) nextR = True; For (r = 2; nextR && r < maxr; r++) { nextR = False; For (k = 1; (!nextR) && k ≤ maxk; k++) { nextR = (Mod[nk, r] == 1 || Mod[nk, r]==0) } } r--; (*the loop over increments by one*) r = 29 (* Step 3 *) If (1 < gcd(a,n) < n for some a ≤ r), output composite. For (a = r; a > 1; a--) { If ((gcd = GCD[a,n]) > 1 && gcd < n), Return[Composite] } gcd = {GCD(29,31)=1, GCD(28,31)=1, ..., GCD(2,31)=1} ≯ 1 (* Step 4 *) If (n ≤ r), output prime. If (n ≤ r), Return[Prime] (* this step may be omitted if n > 5690034 *) 31 > 29 (* Step 5 *) For a = 1 to do If ((X+a)n ≠ Xn + a (mod Xr − 1,n)), output composite; φ[x_] := EulerPhi[x]; PolyModulo[f_] := PolynomialMod[PolynomialRemainder[f, xr-1, x], n]; max = Floor[Log[2, n]√φ[r]]; For (a = 1; a ≤ max; a++) { If (PolyModulo[(x+a)n - PolynomialRemainder[xn+a, xr-1], x] ≠ 0) { Return[Composite] { } (x+a)31 = a31 +31a30x +465a29x2 +4495a28x3 +31465a27x4 +169911a26x5 +736281a25x6 +2629575a24x7 +7888725a23x8 +20160075a22x9 +44352165a21x10 +84672315a20x11 +141120525a19x12 +206253075a18x13 +265182525a17x14 +300540195a16x15 +300540195a15x16 +265182525a14x17 +206253075a13x18 +141120525a12x19 +84672315a11x20 +44352165a10x21 +20160075a9x22 +7888725a8x23 +2629575a7x24 +736281a6x25 +169911a5x26 +31465a4x27 +4495a3x28 +465a2x29 +31ax30 +x31 PolynomialRemainder [(x+a)31, x29-1] = 465a2 +a31 +(31a+31a30)x +(1+465a29)x2 +4495a28x3 +31465a27x4 +169911a26x5 +736281a25x6 +2629575a24x7 +7888725a23x8 +20160075a22x9 +44352165a21x10 +84672315a20x11 +141120525a19x12 +206253075a18x13 +265182525a17x14 +300540195a16x15 +300540195a15x16 +265182525a14x17 +206253075a13x18 +141120525a12x19 +84672315a11x20 +44352165a10x21 +20160075a9x22 +7888725a8x23 +2629575a7x24 +736281a6x25 +169911a5x26 +31465a4x27 +4495a3x28 (A) PolynomialMod [PolynomialRemainder [(x+a)31, x29-1], 31] = a31+x2 (B) PolynomialRemainder [x31+a, x29-1] = a+x2 (A) - (B) = a31+x2 - (a+x2) = a31-a {131-1 = 0 (mod 31), 231-2 = 0 (mod 31), 331-3 = 0 (mod 31), ..., 2631-26 = 0 (mod 31)} (* Step 6 *) Output prime. 31 Must be Prime
Где PolynomialMod — это уменьшение полинома по модулю. например PolynomialMod[x+2x 2 +3x 3 , 3] = х+2x 2 +0x 3
Ссылки
[ редактировать ]- ^ Jump up to: Перейти обратно: а б с д и ж Агравал, Маниндра; Каял, Нирадж; Саксена, Нитин (2004). «ПРАЙМС находится в P» (PDF ) Анналы математики 160 (2): 781–793. дои : 10.4007/анналы.2004.160.781 . JSTOR 3597229 .
- ^ Гранвилл, Эндрю (2005). «Легко определить, является ли данное целое число простым» . Бык. амер. Математика. Соц . 42 : 3–38. дои : 10.1090/S0273-0979-04-01037-7 .
- ^ HW Ленстра-младший и Карл Померанс, « Тестирование простоты с гауссовыми периодами », предварительная версия, 20 июля 2005 г.
- ^ HW Ленстра-младший и Карл Померанс, « Тестирование простоты с гауссовскими периодами. Архивировано 25 февраля 2012 г. в Wayback Machine », версия от 12 апреля 2011 г.
- ^ Дэниел Дж. Бернштейн, « Доказательство первичности после Агравала-Каяла-Саксены », версия от 25 января 2003 г.
- ^ См . страницу обсуждения AKS , где обсуждается, почему отсутствует «Пример 2: n не является простым после шага 4».
Дальнейшее чтение
[ редактировать ]- Дитцфельбингер, Мартин (2004). Проверка простоты за полиномиальное время. От рандомизированных алгоритмов к PRIMES находится в P. Конспекты лекций по информатике. Том. 3000. Берлин: Springer-Verlag . ISBN 3-540-40344-2 . Збл 1058.11070 .
Внешние ссылки
[ редактировать ]- Вайсштейн, Эрик В. «Тест на примитивность AKS» . Математический мир .
- Р. Крэндалл, Apple ACG и Дж. Пападопулос (18 марта 2003 г.): О реализации тестов простоты класса AKS (PDF)
- Статья Борнемана, содержащая фотографии и информацию о трех индийских ученых (PDF)
- Эндрю Грэнвилл: Легко определить, является ли данное целое число простым
- Основные факты: от Евклида до АКС , Скотт Ааронсон (PDF)
- PRIMES находится в P small FAQ от Антона Стиглича
- Цитирование премии Гёделя 2006 г.
- Цитирование премии Фулкерсона 2006 г.
- Ресурс по алгоритму AKS "PRIMES in P"