- Тест Агравала
-
В информатике тест Агравала — Каяла — Саксены (или тест AKS) — это полиномиальный детерминированный тест простоты чисел, предложенный индийскими учёным Маниндрой Агравалом (англ.) и его двумя студентами Нираджем Каялом (англ.) и Нитином Саксеной (англ.) Индийского технического института Канпура (англ.) и впервые опубликованный 6 августа 2002 года в статье «PRIMES is in P»[1]. До этой публикации принадлежность задачи распознавания простоты классу P являлась открытой проблемой. За своё открытие авторы получили премию Гёделя и Приз Фалькерсона (англ.) в 2006 году.
Содержание
Свойства
Основным достижением авторов является то, что тест АКС является первым опубликованным алгоритмом проверки на простоту, который одновременно универсален, полиномиален, детерминирован и безусловен. Предыдущие алгоритмы обладали не более чем тремя из перечисленных свойств.
- Универсальность: Тест AKS может использоваться для проверки простоты любых чисел. Многие быстрые тесты предназначены для проверки чисел из ограниченного множества. Например, тест Люка — Лемера работает только для чисел Мерсенна, а тест Пепина применим лишь к числам Ферма.
- Полиномиальность: Наибольшее время работы алгоритма ограничено полиномом от количества цифр в проверяемом числе. Тесты ECPP (англ.) и APR (англ.) могут доказать или опровергнуть простоту числа, но для них не доказано, что время работы будет полиномиальным для любого входного числа.
- Детерминизм: Алгоритм гарантирует получение ответа. Вероятностные тесты, такие как тест Миллера — Рабина и тест BPSW (англ.), могут проверить простоту числа за полиномиальное время, но при этом дают лишь вероятностный ответ.
- Безусловность: Корректность теста AKS не зависит от каких-либо недоказанных гипотез. Напротив, тест Миллера детерминирован и работает за полиномиальное время для любого входного числа, но его корректность зависит от недоказанной обобщённой гипотезы Римана.
На практике тёст не нашел широкого применения, так как его время работы оценивается как
(log7.5 n), где n — тестируемое число.
Теорема и алгоритм
Основная идея
Вместо кольца
рассматривают поле
, где h = h(x) — неприводимый делитель
над полем Fp, отличный от
. Оценивают число многочленов этого поля, для которых выполняется соотношение вида
, и приходят к противоречию.
Алгоритм
- Input: integer n > 1.
- If n = ab for integers a > 0 and b > 1, output composite.
- Найдем наименьшее r sтакое что or(n) > log2(n).
- If 1 < gcd(a,n) < n for some a ≤ r, output composite.
- If n ≤ r, output prime.
- For a = 1 to
do
- if (X+a)n≠ Xn+a (mod Xr − 1,n), output composite;
- Output prime.
Здесь or(n) это показатель числа n по модулю r, log — двоичный логарифм и
— функция Эйлера для r.
Теорема
Алгоритм вернет prime тогда и только тогда когда n простое.
Улучшенный алгоритм[2]
(n∈ N, n > 1)
- If (n = ab for a ∈ N and b > 1), output COMPOSITE.
- Найдем наименьшее r sтакое что or(n) > log2(n)
- If gcd(a, n) ≠ 1 for all a ≤ r, output COMPOSITE.
- For a = 1 to
do
- if (X+a)n= Xn+a (mod f(x),n), output PRIME.
Используемые теоремы и леммы
Основным отправным пунктом является малая теорема Ферма и несколько лемм, доказанных в исходной статье[1]. Приведем обозначения принятые в статье. Покажем условия лемм и несколько наиболее важных доказательств к ним.
Принятые обозначения
- группа всех чисел, которые являются вычетами для чисел из набора
по модулю r. Данная подгруппа уже содержит (n,r)=(p,r)=1. Так же
. Группа
сгенерированна n, p по модулю r начиная с
,
.
Вторая группа -. Данная группа является набором всех вычетов полиномов в P (пространстве простых чисел) по модулю h(X) и p. Эта группа сгенерированна элементами X, X+1, X+2, ..., X+l в поле
и является подгруппой мультипликативной группы Fp. Где Fp - конечное поле.
Леммы
- Пусть а, n ∈ ℤ, n ≥ 2, и (a,n) = 1. Тогда n является простым тогда и только тогда, когда
- (X + a)n ≡ Xn + a (mod n)
- Пусть НОК(m), обозначает наименьшее общее кратное первых m чисел. Тогда для m ≥ 7 справедливо неравенство:
- НОК(m) ≥ 2m
- Если n простое, то алгоритм вернет prime.
- Существует r такое, что
, такое что
.
- Для полинома
и числа
, говорится что m включено в
, если
- Если числа m и m' включены в
, то их произведение
также включено
- Если число m включено в
и
, то m так же включено в
- (Лемма Х. Ленстры (англ.))
- Если n не является степенью p, то
- Если алгоритм возвращает prime, то n простое
Доказательства
Лемма 1
, однако известно, для простого
выполняется
при
. Кроме того,
. Если же
составное, a
его простой делитель, то коэффициент при
в левой части выражения не равен
.
Лемма 3
Если n простое, то на шагах 1 и 3 алгоритм никогда не выдаст COMPOSITE. По лемме 1 цикл алгоритма, так же не выдаст COMPOSITE. Следовательно, алгоритм определит, что n простое на шаге 4 или 6.
Лемма 4
Обозначим
и рассмотрим произведение
. Число
делится на некоторое
тогда и только тогда, когда либо
делится на
, либо при каком-то
выполняется
. Оценим величину
. Так как
, то
. Возможны два случая: либо НОД( n, r)=1(НОД(n,r) обозначается как (n,r)) , и тогда
— то самое, о существовании которого говорит лемма, либо ( n, r) > 1 . В последнем случае заметим, что
делится на
и не делится на
, значит, делится на ( n, r) и не делится на
. Число
и будет требуемым, так как НОД( s,n)=1.
Лемма 10
Предположим, что алгоритм выдал PRIME. По лемме 8, для
и
:
По лемме 9,если n не степень числа p. По этой причине n=pk для любых k>0. Если k>1, тогда алгоритм вернет COMPOSITE в шаге 1, следовательно n=p.
Время работы алгоритма
Время работы алгоритма в наихудшем случае оценивается как
(log10.5 n)[1].[уточнить]
В предположении верности гипотезы Артина, время выполнения улучшается до
(log6 n).
В предположении верности гипотезы Софи Жермен, время также стремится к
(log6 n).
Алгоритм требует
(log7.5 n).[уточнить] Однако в 2005 году Померансом (англ.) и Ленстрой (англ.) был предложен вариант алгоритма, который выполняется за
(log6 n)[3] и в 2011 году время работы алгоритма было улучшено до
(log3 n) в статье "Primality Testing with Gaussian Periods"[2].
Реализации
Реализация теста AKS в первоначальном и улучшенном варианте с использованием различных библиотек показаны в статье "An Implementation of the AKS Primality Test"[4].
В данной статье сравнивались алгоритмы описанные в статьях «PRIMES is in P»[1] и "Primality Testing with Gaussian Periods"[2]. В работе приведены реализации алгоритма на языке
С++. Так же сравнивались библиотеки NTL, LiDIA, GMU NTL, Apple/UMD. В статье приведены наглядные примеры в виде графиков и возможные улучшения в будущем.Примечания
- ↑ 1 2 3 4 Manindra Agrawal, Neeraj Kayal, Nitin Saxena PRIMES is in P // Annals of Mathematics. — 2004. — Т. 160. — № 2. — С. 781–793.
- ↑ 1 2 3 H. W. Lenstra jr. and Carl Pomerance, "Primality testing with Gaussian periods", version of April 12, 2011.
- ↑ H. W. Lenstra, Jr. and Carl Pomerance, «Primality Testing with Gaussian Periods», preliminary version July 20, 2005.
- ↑ Robert G. Salembier and Paul Southerington, "An Implementation of the AKS Primality Test"
Ссылки
- Л. Бараш Алгоритм AKS проверки чисел на простоту и поиск констант генераторов псевдослучайных чисел // Безопасность информационных технологий. — 2005. — № 2. — С. 27-38.
- Weisstein, Eric W. AKS Primality Test (англ.) на сайте Wolfram MathWorld.
- R. Crandall, Apple ACG, J. Papadopoulos, On the implementation of AKS-class primality tests, 2003.
- JAVA implementation of the AKS Primality Test algorithm
- The AKS "PRIMES in P" Algorithm Resource
- Perl implementation of the AKS Primality Test
- Агафонова И. В. Проверка чисел на простоту: полиномиальный алгоритм // Семинар по дискретному гармоническому анализу и геометрическому моделированию.
Категория:- Тесты простоты
Wikimedia Foundation. 2010.