Jump to content

AKS primality test

(Перенаправлено из алгоритма AKS )

Тест простоты 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 .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 3ffdc3e829317ffd1f865508f260dfb5__1710868740
URL1:https://arc.ask3.ru/arc/aa/3f/b5/3ffdc3e829317ffd1f865508f260dfb5.html
Заголовок, (Title) документа по адресу, URL1:
AKS primality test - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)