Тест на простоту AKS - AKS primality test
Тест простоты AKS (также известный как тест простоты Агравала – Каяла – Саксены и циклотомический тест AKS ) - это детерминированный алгоритм доказательства простоты , созданный и опубликованный Маниндрой Агравал , Нираджем Каялом и Нитином Саксеной , компьютерными учеными из Индийского технологического института Канпура. , 6 августа 2002 г., в статье "ПРИМЕРЫ в П". Алгоритм был первым, который может доказуемо определить, является ли данное число простым или составным за полиномиальное время , не полагаясь на математические гипотезы, такие как обобщенная гипотеза Римана . Доказательство также примечательно тем, что не опирается на область анализа . В 2006 году авторы получили как гёделевскую премию и Фулкерсон премию за свою работу.
Важность
AKS - это первый алгоритм доказательства простоты, который одновременно является общим , полиномиальным , детерминированным и безусловным . Предыдущие алгоритмы разрабатывались веками и достигли максимум трех из этих свойств, но не всех четырех.
- Алгоритм AKS может использоваться для проверки простоты любого заданного общего числа. Известно множество быстрых тестов на простоту, которые работают только для чисел с определенными свойствами. Например, тест Лукаса – Лемера работает только для чисел Мерсенна , в то время как тест Пепена применим только к числам Ферма .
- Максимальное время работы алгоритма может быть выражено как полином по количеству цифр в целевом числе. ECPP и APR окончательно доказывают или опровергают, что данное число является простым, но не известно, что они имеют полиномиальные временные границы для всех входных данных.
- Гарантируется, что алгоритм детерминированно распознает, является ли целевое число простым или составным. Рандомизированные тесты, такие как Миллера – Рабина и Бэйли – PSW , могут проверять простоту любого заданного числа за полиномиальное время, но, как известно, дают только вероятностный результат.
- Правильность AKS не зависит от какой-либо дополнительной недоказанной гипотезы . Напротив, версия Миллера-Рабина полностью детерминирована и выполняется за полиномиальное время по всем входным параметрам, но ее правильность зависит от истинности еще не доказанной обобщенной гипотезы Римана .
Хотя алгоритм имеет огромное теоретическое значение, он не используется на практике, что делает его галактическим алгоритмом . Для 64-битных входных данных тест простоты Baillie – PSW является детерминированным и выполняется на много порядков быстрее. Для больших входных данных производительность (также безусловно правильных) тестов ECPP и APR намного превосходит AKS. Кроме того, ECPP может выводить сертификат первичности, который позволяет независимую и быструю проверку результатов, что невозможно с алгоритмом AKS.
Концепции
Тест на простоту AKS основан на следующей теореме: если задано целое и целое число, взаимно простое с , является простым тогда и только тогда, когда соотношение полиномиальной конгруэнтности
-
( 1 )
внутри кольца многочленов . Обратите внимание, что это означает неопределенное, которое порождает это кольцо многочленов.
Эта теорема является обобщением малой теоремы Ферма на многочлены . В одном направлении это можно легко доказать, используя биномиальную теорему вместе со следующим свойством биномиального коэффициента :
- для всех, если прост.
Хотя соотношение ( 1 ) само по себе представляет собой тест на простоту, проверка его занимает экспоненциальное время : метод грубой силы потребует расширения полинома и уменьшения результирующих коэффициентов.
Сравнение есть равенство в кольце многочленов . Вычисление в кольце частных создает верхнюю границу степени задействованных многочленов. AKS оценивает равенство в , делая вычислительную сложность зависимой от размера . Для наглядности это выражается как соответствие
-
( 2 )
что то же самое, что:
-
( 3 )
для некоторых полиномов и .
Обратите внимание, что все простые числа удовлетворяют этому соотношению (выбор в ( 3 ) дает ( 1 ), которое справедливо для простых чисел ). Это сравнение можно проверить за полиномиальное время, если оно полиномиально от цифр . Алгоритм AKS оценивает это соответствие для большого набора значений, размер которых полиномиален цифрам . Доказательство достоверности алгоритма AKS показывает, что можно найти и набор значений с указанными выше свойствами, так что если сравнения выполняются, то является степенью простого числа.
История и время работы
В первой версии процитированной выше статьи авторы доказали, что асимптотическая временная сложность алгоритма равна (используя Õ из нотации большого O ) - двенадцатую степень числа цифр в n раз, множитель, который является полилогарифмическим в количество цифр. Однако эта верхняя граница была довольно нечеткой; широко распространенная гипотеза о распределении простых чисел Софи Жермен , если она верна, немедленно сократила бы худший случай до .
Через несколько месяцев после открытия появились новые варианты (Lenstra 2002, Pomerance 2002, Berrizbeitia 2002, Cheng 2003, Bernstein 2003a / b, Lenstra and Pomerance 2003), которые значительно повысили скорость вычислений. Из-за существования множества вариантов Крэндалл и Пападопулос ссылаются на «класс алгоритмов AKS» в своей научной статье «О реализации тестов на простоту класса AKS», опубликованной в марте 2003 года.
В ответ на некоторые из этих вариантов, а также на другие отзывы, статья «PRIMES is in P» была обновлена новой формулировкой алгоритма AKS и доказательства его правильности. (Эта версия в конечном итоге была опубликована в Annals of Mathematics .) Хотя основная идея осталась прежней, r был выбран новым способом, и доказательство правильности было организовано более последовательно. Новое доказательство основывалось почти исключительно на поведении круговых многочленов над конечными полями . Новая верхняя граница временной сложности была позже уменьшена с использованием дополнительных результатов теории решет до .
В 2005 году Померанс и Ленстра продемонстрировали вариант AKS, который работает в рабочем состоянии, что привело к созданию еще одной обновленной версии документа. Агравал, Каял и Саксена предложили вариант, который работал бы, если бы гипотеза Агравала была верна; однако эвристический аргумент Померанса и Ленстры показал, что он, вероятно, неверен.
Алгоритм
Алгоритм следующий:
- Ввод: целое число n > 1 .
- Проверьте , если п является идеальной мощность : если п = б для целых чисел через > 1 и Ь > 1 , выходной композитного .
- Найдите наименьшее r такое, что ord r ( n )> (log 2 n ) 2 . (если r и n не взаимно просты, пропустите это r )
- Для всех 2 ≤ a ≤ min ( r , n −1) проверьте, что a не делит n : если a | n для некоторого 2 ≤ a ≤ min ( r , n −1), выходной составной .
- Если n ≤ r , вывести простое число .
- Для a = 1 нужно сделать
- если ( X + a ) n ≠ X n + a (mod X r - 1, n ), вывести составной ;
- Вывести простое число .
Здесь Ord г ( п ) является мультипликативным порядком из п по модулю г , бревенчатый 2 представляет собой двоичный логарифм , и это totient функция Эйлера из г .
Шаг 3 показан в документе как проверка 1 <( a , n ) < n для всех a ≤ r . Видно, что это эквивалентно пробному делению до r , которое может быть выполнено очень эффективно без использования gcd . Точно так же сравнение на шаге 4 может быть заменено на то, чтобы пробное деление возвращало простое число после проверки всех значений до включительно
Выйдя за пределы очень маленьких входов, шаг 5 доминирует над затраченным временем. Существенное снижение сложности (от экспоненциальной к полиномиальной) достигается выполнением всех вычислений в конечном кольце
состоящий из элементов. Это кольцо содержит только одночлены , а коэффициенты , в которых есть элементы, все они кодируются в битах.
Большинство более поздних улучшений, внесенных в алгоритм, были сосредоточены на уменьшении размера r, что ускоряет выполнение основной операции на шаге 5, и на уменьшении размера s , количества циклов, выполняемых на шаге 5. Обычно эти изменения не меняют вычислений. сложность, но может привести к тому, что потребуется на много порядков меньше времени, например, окончательная версия Бернштейна имеет теоретическое ускорение более чем в 2 миллиона раз.
Схема доказательства действительности
Чтобы алгоритм был правильным, все шаги, которые определяют n, должны быть правильными. Шаги 1, 3 и 4 тривиально верны, поскольку они основаны на прямых проверках делимости n . Шаг 5 тоже верно: так как (2) справедливо при любом выборе в копервичных к п и г , если п простое, неравенство означает , что п должно быть составным.
Сложным случаем алгоритма является повторение оператора на шаге 5. Если это в пределах конечного кольца R, происходит несовпадение
это эквивалентно
- ,
так что после сокращения до r мономов с помощью только нужно проверять.
Пример 1: n = 31 простое число
- Ввод: целое число n = 31> 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}
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
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
If n ≤ r, output prime. If [n ≤ r, Return[Prime]]; (* this step may be omitted if n > 5690034 *) 31 > 29
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 max = = 26 {131-1=0 (mod 31), 231-2=0 (mod 31), 331-3=0 (mod 31), ..., 2631-26=0 (mod 31)}
Output prime. 31 Must be Prime
Где PolynomialMod - это почленное сокращение полинома по модулю. например, PolynomialMod [x + 2x 2 + 3x 3 , 3] = x + 2x 2 + 0x 3
использованная литература
дальнейшее чтение
- Дицфельбингер, Мартин (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]