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 .
  1. Проверьте, ли n является полной степенью : если n = a б для целых чисел a > 1 и b > 1 выведите составной результат .
  2. Найдите наименьший r такой, что ord r ( n ) > (log 2 n ) 2 . Если r и n не являются взаимно простыми, выведите составной результат .
  3. Для всех 2 ≤ a ≤ min ( r , n −1) проверьте, что a не делит n : Если a | n для некоторых 2 ⩽ a ⩽ min ( r , n −1), затем выведите Composite .
  4. Если n r , выведите prime .
  5. Для а = 1 до делать
    если ( Икс + а ) н Х н + а (мод X р − 1, n ), затем вывести составной ;
  6. Выходное простое число .

Здесь 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 ar), 
     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 (nr), 
     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)nXn + 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

[6]

Ссылки [ править ]

  1. ^ Jump up to: а б с д и ж Агравал, Маниндра; Каял, Нирадж; Саксена, Нитин (2004). «ПРАЙМС находится в P» (PDF ) Анналы математики 160 (2): 781–793. дои : 10.4007/анналы.2004.160.781 . JSTOR   3597229 .
  2. ^ Гранвилл, Эндрю (2005). «Легко определить, является ли данное целое число простым» . Бык. амер. Математика. Соц . 42 : 3–38. дои : 10.1090/S0273-0979-04-01037-7 .
  3. ^ HW Ленстра-младший и Карл Померанс, « Тестирование простоты с гауссовыми периодами », предварительная версия, 20 июля 2005 г.
  4. ^ HW Ленстра-младший и Карл Померанс, « Тестирование простоты с гауссовскими периодами. Архивировано 25 февраля 2012 г. в Wayback Machine », версия от 12 апреля 2011 г.
  5. ^ Дэниел Дж. Бернштейн, « Доказательство первичности после Агравала-Каяла-Саксены », версия от 25 января 2003 г.
  6. ^ См . страницу обсуждения AKS , где обсуждается, почему отсутствует «Пример 2: n не является простым после шага 4».

Дальнейшее чтение [ править ]

  • Дитцфельбингер, Мартин (2004). Проверка простоты за полиномиальное время. От рандомизированных алгоритмов к PRIMES находится в P. Конспекты лекций по информатике. Том. 3000. Берлин: Springer-Verlag . ISBN  3-540-40344-2 . Збл   1058.11070 .

Внешние ссылки [ править ]