Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Тест простоты AKS (также известный как тест простоты Агравала – Каяла – Саксены и циклотомический тест AKS ) - это детерминированный алгоритм доказательства простоты , созданный и опубликованный Маниндрой Агравал , Нираджем Каялом и Нитином Саксеной , компьютерными учеными из Индийского технологического института Канпура. , 6 августа 2002 г., в статье "ПРИМЫ в П". [1] Алгоритм был первым, который может доказать, является ли данное число простым или составным за полиномиальное время , не полагаясь наобобщенная гипотеза Римана или любая математическая гипотеза . Доказательство также примечательно тем, что не опирается на область анализа . [2] За эту работу авторы получили премию Гёделя 2006 года и премию Фулкерсона 2006 года .

Важность [ править ]

AKS - это первый алгоритм доказательства простоты, который одновременно является общим , полиномиальным , детерминированным и безусловным . Предыдущие алгоритмы разрабатывались веками и достигли максимум трех из этих свойств, но не всех четырех.

  • Алгоритм AKS может использоваться для проверки простоты любого заданного общего числа. Известно множество быстрых тестов на простоту, которые работают только для чисел с определенными свойствами. Например, тест Лукаса – Лемера работает только для чисел Мерсенна , в то время как тест Пепена применим только к числам Ферма .
  • Максимальное время работы алгоритма может быть выражено как полином по количеству цифр в целевом числе. ECPP и APR убедительно доказывают или опровергают, что данное число является простым, но не известно, что они имеют полиномиальные временные границы для всех входных данных.
  • Гарантируется, что алгоритм детерминированно распознает, является ли целевое число простым или составным. Рандомизированные тесты, такие как Миллера – Рабина и Бейли – PSW , могут проверять простоту любого заданного числа за полиномиальное время, но, как известно, дают только вероятностный результат.
  • Правильность AKS не зависит от какой-либо дополнительной недоказанной гипотезы . Напротив, версия теста Миллера – Рабина полностью детерминирована и выполняется за полиномиальное время по всем входным параметрам, но ее правильность зависит от истинности еще не доказанной обобщенной гипотезы Римана .

Хотя алгоритм имеет огромное теоретическое значение, он не используется на практике, что делает его галактическим алгоритмом . Для 64-битных входных данных тест простоты Baillie – PSW является детерминированным и выполняется на много порядков быстрее. Для больших входных данных производительность (также безусловно правильных) тестов ECPP и APR намного превосходит AKS. Кроме того, ECPP может выводить сертификат первичности, который позволяет независимую и быструю проверку результатов, что невозможно с алгоритмом AKS.

Концепции [ править ]

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

держит. [1] Обратите внимание, что это следует понимать как формальный символ.

Эта теорема является обобщением малой теоремы Ферма на многочлены . В одном направлении это можно легко доказать, используя биномиальную теорему вместе со следующим свойством биномиального коэффициента :

для всех, если прост.

Хотя соотношение ( 1 ) само по себе представляет собой тест на простоту, проверка его занимает экспоненциальное время : метод грубой силы потребует расширения полинома и уменьшения результирующих коэффициентов.

Сравнение есть равенство в кольце многочленов . Вычисление в кольце частных создает верхнюю границу степени задействованных многочленов. AKS оценивает равенство в , делая вычислительную сложность зависимой от размера . Для ясности [1] это выражается как сравнение

что то же самое, что:

для некоторых многочленов и .

Обратите внимание, что все простые числа удовлетворяют этому соотношению (выбор в ( 3 ) дает ( 1 ), которое справедливо для простых чисел ). Это сравнение может быть проверено за полиномиальное время, когда оно полиномиально от цифр . Алгоритм AKS оценивает это соответствие для большого набора значений, размер которых полиномиален цифрам . Доказательство достоверности алгоритма AKS показывает, что можно найти и набор значений с указанными выше свойствами, так что если сравнения выполняются, то является степенью простого числа. [1]

История и время работы [ править ]

В первой версии процитированной выше статьи авторы доказали, что асимптотическая временная сложность алгоритма равна (используя Õ из нотации большого O ) - двенадцатую степень числа цифр в n раз, множитель, который является полилогарифмическим в количество цифр. Однако эта верхняя граница была довольно нечеткой; широко распространенная гипотеза о распределении простых чисел Софи Жермен , если она верна, немедленно сократила бы худший случай до .

Через несколько месяцев после открытия появились новые варианты (Lenstra 2002, Pomerance 2002, Berrizbeitia 2002, Cheng 2003, Bernstein 2003a / b, Lenstra and Pomerance 2003), которые значительно повысили скорость вычислений. Из-за существования множества вариантов Крэндалл и Пападопулос в своей научной статье «О реализации тестов простоты класса AKS», опубликованной в марте 2003 года, ссылаются на «класс алгоритмов AKS».

В ответ на некоторые из этих вариантов, а также на другие отзывы, статья «PRIMES is in P» была обновлена ​​новой формулировкой алгоритма AKS и доказательства его правильности. (Эта версия в конечном итоге была опубликована в Annals of Mathematics .) Хотя основная идея осталась прежней, r был выбран новым способом, и доказательство правильности было организовано более последовательно. Новое доказательство основывалось почти исключительно на поведении круговых многочленов над конечными полями . Новая верхняя граница временной сложности была позже уменьшена с использованием дополнительных результатов теории решет до .

В 2005 году Померанс и Ленстра продемонстрировали вариант AKS, который работает в оперативном режиме [3], что привело к еще одной обновленной версии статьи. [4] Агравал, Каял и Саксена предложили вариант, который работал бы, если бы гипотеза Агравала была верна; однако эвристический аргумент Померанса и Ленстры показал, что он, вероятно, неверен. [1]

Алгоритм [ править ]

Алгоритм следующий: [1]

Ввод: целое число n  > 1 .
  1. Проверьте , если п является идеальной мощность : если п  =  б для целых чисел через  > 1 и Ь  > 1 , выходной композитного .
  2. Найдите наименьшее r такое, что ord r ( n )> (log 2 n ) 2 . (если r и n не взаимно просты, пропустите это r )
  3. Для всех 2 ≤ a ≤ min ( r , n −1) проверьте, что a не делит n : если a | n для некоторого 2 ≤ a ≤ min ( r , n −1), выходной составной .
  4. Если nr , вывести простое число .
  5. Для a  = 1 нужно сделать
    если ( X + a ) nX n + a (mod X r - 1, n ), вывести составной ;
  6. Вывести простое число .

Здесь Ord г ( п ) является мультипликативным порядком из п по модулю г , бревенчатый 2 представляет собой двоичный логарифм , и это totient функция Эйлера из г .

Шаг 3 показан в документе как проверка 1 <( a , n ) < n для всех ar . Видно, что это эквивалентно пробному делению до r , которое может быть выполнено очень эффективно без использования gcd . Точно так же сравнение на шаге 4 можно заменить, если пробное деление вернет простое число после проверки всех значений до включительно

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

состоящий из элементов. Это кольцо содержит только одночлены , а коэффициенты , в которых есть элементы, все они кодируются в битах.

Большинство более поздних улучшений, внесенных в алгоритм, были сосредоточены на уменьшении размера r, что ускоряет выполнение основной операции на шаге 5, и на уменьшении размера s , количества циклов, выполняемых на шаге 5. [5] Обычно эти изменения не выполняются. изменить вычислительную сложность, но может привести к сокращению времени на много порядков, например, окончательная версия Бернштейна имеет теоретическое ускорение более чем в 2 миллиона раз.

Схема доказательства действительности [ править ]

Чтобы алгоритм был правильным, все шаги, которые определяют n, должны быть правильными. Шаги 1, 3 и 4 тривиально верны, поскольку они основаны на прямых проверках делимости n . Шаг 5 тоже верно: так как (2) справедливо при любом выборе в копервичных к п и г , если п простое, неравенство означает , что п должно быть составным.

Сложным случаем алгоритма является повторение оператора на шаге 5. Если это в пределах конечного кольца R, происходит несовпадение

это эквивалентно

,

так что после сокращения до r мономов с помощью только нужно проверять. [1]

Пример 1: n = 31 - простое число [ править ]

Ввод: целое число n  = 31> 1.
  1.  Если n  =  a b для целых чисел a  > 1 и b  > 1, вывести составной . Для [b = 2, b <= log 2 (n), b ++, а = n 1 / b ; Если [a - целое число, Вернуть [Составной]] ]; a = n 1/2 ... n 1/4 = {5.568, 3.141, 2.360}
  2.  Найдите наименьшее r такое, что O r ( n )> (log 2  n ) 2 . maxk = ⌊ (журнал 2  n) 2 ⌋; maxr = Макс [3, (Log 2  n) 5 ⌉]; (* maxr действительно не нужен *) nextR = True; Для [r = 2, nextR && r <maxr, r ++, nextR = Ложь; Для [k = 1, (! NextR) && k ≤ maxk, k ++, nextR = (Mod [n k , r] == 1 || Mod [n k , r] == 0) ] ]; р--; (* цикл увеличивается на единицу *)   г = 29
  3.  Если 1 <  gcd ( a , n ) <  n для некоторого ar , вывести составной . Для [a = r, a> 1, a--, Если [(gcd = GCD [a, n])> 1 && gcd <n, вернуть [Composite]] ];   НОД = {НОД (29,31) = 1, НОД (28,31) = 1, ..., НОД (2,31) = 1} ≯ 1
  4.  Если nr , вывести простое число . Если [n ≤ r, вернуть [Prime]]; (* этот шаг можно пропустить, если n> 5690034 *)   31> 29
  5.  Для a  = 1 нужно сделать если ( X + a ) nX n + a (mod X r - 1, n ), вывести составной ;   φ [x _]: = ЭйлерФи [x]; PolyModulo [f _]: = PolynomialMod [ PolynomialRemainder [f, x r -1, x], n]; max = Этаж [Лог [2, n] φ [r] ]; Для [a = 1, a ≤ max, a ++, Если [PolyModulo [(x + a) n -PolynomialRemainder [x n + a, x r -1], x] ≠ 0, Вернуть [Composite] ] ];   (х + а) 31  = a 31 + 31a 30 x + 465a 29 x 2 + 4495a 28 x 3 + 31465a 27 x 4 + 169911a 26 x 5 + 736281a 25 x 6 + 2629575a 24 x 7 + 7888725a 23 x 8 + 20160075a 22 x 9 + 44352165a 21 x 10 + 84672315a 20 x 11 + 141120525a 19 x 12 + 206253075a 18 x13 + 265182525a 17 x 14 + 300540195a 16 x 15 + 300540195a 15 x 16 + 265182525a 14 x 17 + 206253075a 13 x 18 + 141120525a 12 x 19 + 84672315a 11 x 20 + 44352165a 10 x 21 + 20160075a 9 x 22 + 7888725a 8 x 23 + 2629575a 7 x 24 + 736281a 6 x 25 + 169911a5 x 26 + 31465a 4 x 27 + 4495a 3 x 28 + 465a 2 x 29 + 31ax 30 + x 31   PolynomialRemainder [(x + a) 31 , x 29 -1] = 465a 2 + a 31 + (31a + 31a 30 ) x + (1 + 465a 29 ) x 2 + 4495a 28 x 3 + 31465a 27 x 4 + 169911a 26 x 5 + 736281a 25 x 6 + 2629575a 24 x 7 + 7888725a 23 x 8 + 20160075a 22 x 9 + 44352165a 21 x 10 + 84672315a 20 x 11 + 141120525a 19 x 12+ 206253075a 18 х 13 + 265182525a 17 х 14 + 300540195a 16 х 15 + 300540195a 15 х 16 + 265182525a 14 х 17 + 206253075a 13 х 18 + 141120525a 12 х 19 + 84672315a 11 х 20 + 44352165a 10 х 21 + 20160075a 9 х 22 + 7888725a 8 x 23 + 2629575a 7 x 24 + 736281a 6х 25 + 169911a 5 х 26 + 31465a 4 х 27 + 4495a 3 х 28   ( A ) PolynomialMod [PolynomialRemainder [(x + a) 31 , x 29 -1], 31] = a 31 + x 2   ( B ) PolynomialRemainder [x 31 + a, x 29 -1] = a + x 2   ( A ) - ( B ) = a 31 + x 2  - (a + x 2 ) = a 31 -a   макс =   = 26   {1 31 -1 = 0 ( по модулю 31), 2 31 -2 = 0 ( по модулю 31), 3 31 -3 = 0 ( по модулю 31), ..., 26 31 -26 = 0 ( по модулю 31)}
  6.  Вывести простое число . 31 Должно быть Prime

Где PolynomialMod - это почленное сокращение полинома по модулю. например, PolynomialMod [x + 2x 2 + 3x 3 , 3] = x + 2x 2 + 0x 3

[6]

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

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

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

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

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

  • Вайсштейн, Эрик В. «Тест на простоту AKS» . MathWorld .
  • Р. Крэндалл, Apple ACG и Дж. Пападопулос (18 марта 2003 г.): О реализации тестов простоты класса AKS (PDF)
  • Статья Борнемана, содержащая фотографии и информацию о трех индийских ученых (PDF)
  • Эндрю Гранвилл: Легко определить, является ли данное целое число простым.
  • Основные факты: от Евклида до AKS , Скотт Ааронсон (PDF)
  • PRIMES находится в P маленьком FAQ Антона Стиглика.
  • Присуждение премии Гёделя за 2006 год
  • Присуждение премии Фулкерсона за 2006 год
  • Ресурс алгоритма AKS "PRIMES in P"
  • Грайм, доктор Джеймс. «Тест на защиту от дурака для простых чисел - Numberphile» (видео) . Брэди Харан . [видео описывает экспоненциальную зависимость времени (1), которую он называет AKS]