Тест Агравала

Тест Агравала

В информатике тест Агравала — Каяла — Саксены (или тест AKS) — это полиномиальный детерминированный тест простоты чисел, предложенный индийскими учёным Маниндрой Агравалом (англ.) и его двумя студентами Нираджем Каялом (англ.) и Нитином Саксеной (англ.) Индийского технического института Канпура (англ.) и впервые опубликованный 6 августа 2002 года в статье «PRIMES is in P»[1]. До этой публикации принадлежность задачи распознавания простоты классу P являлась открытой проблемой. За своё открытие авторы получили премию Гёделя и Приз Фалькерсона (англ.) в 2006 году.

Содержание

Свойства

Основным достижением авторов является то, что тест АКС является первым опубликованным алгоритмом проверки на простоту, который одновременно универсален, полиномиален, детерминирован и безусловен. Предыдущие алгоритмы обладали не более чем тремя из перечисленных свойств.

  • Универсальность: Тест AKS может использоваться для проверки простоты любых чисел. Многие быстрые тесты предназначены для проверки чисел из ограниченного множества. Например, тест Люка — Лемера работает только для чисел Мерсенна, а тест Пепина применим лишь к числам Ферма.
  • Полиномиальность: Наибольшее время работы алгоритма ограничено полиномом от количества цифр в проверяемом числе. Тесты ECPP (англ.) и APR (англ.) могут доказать или опровергнуть простоту числа, но для них не доказано, что время работы будет полиномиальным для любого входного числа.
  • Детерминизм: Алгоритм гарантирует получение ответа. Вероятностные тесты, такие как тест Миллера — Рабина и тест BPSW (англ.), могут проверить простоту числа за полиномиальное время, но при этом дают лишь вероятностный ответ.
  • Безусловность: Корректность теста AKS не зависит от каких-либо недоказанных гипотез. Напротив, тест Миллера детерминирован и работает за полиномиальное время для любого входного числа, но его корректность зависит от недоказанной обобщённой гипотезы Римана.

На практике тёст не нашел широкого применения, так как его время работы оценивается как \mathcal{O}(log7.5 n), где n — тестируемое число.

Теорема и алгоритм

Основная идея

Вместо кольца  \frac{Fp[x]}{x^r-1} рассматривают поле F = \frac{Fp[x]}{h}, где h = h(x) — неприводимый делитель {x^r - 1} над полем Fp, отличный от  x-1 . Оценивают число многочленов этого поля, для которых выполняется соотношение вида  (x+a)^n=(x^n+a) \mod {(x^r-1,n)}, и приходят к противоречию.

Алгоритм

Input: integer n > 1.
  1. If n = ab for integers a > 0 and b > 1, output composite.
  2. Найдем наименьшее r sтакое что or(n) > log2(n).
  3. If 1 < gcd(a,n) < n for some ar, output composite.
  4. If nr, output prime.
  5. For a = 1 to \scriptstyle\lfloor \scriptstyle{\sqrt{\varphi(r)}\log(n)} \scriptstyle\rfloor do
    if (X+a)nXn+a (mod Xr − 1,n), output composite;
  6. Output prime.

Здесь or(n) это показатель числа n по модулю r, logдвоичный логарифм и \scriptstyle\varphi(r) — функция Эйлера для r.

Теорема

Алгоритм вернет prime тогда и только тогда когда n простое.

Улучшенный алгоритм[2]

(n∈ N, n > 1)

  1. If (n = ab for a ∈ N and b > 1), output COMPOSITE.
  2. Найдем наименьшее r sтакое что or(n) > log2(n)
  3. If gcd(a, n) ≠ 1 for all a ≤ r, output COMPOSITE.
  4. For a = 1 to \mathcal b \sqrt{r}\log n \mathcal c do
    if (X+a)n= Xn+a (mod f(x),n), output PRIME.

Используемые теоремы и леммы

Основным отправным пунктом является малая теорема Ферма и несколько лемм, доказанных в исходной статье[1]. Приведем обозначения принятые в статье. Покажем условия лемм и несколько наиболее важных доказательств к ним.

Принятые обозначения

G - группа всех чисел, которые являются вычетами для чисел из набора  I = \left \{  \left ( \frac{n}{p} \right )^i*p^j \mathcal j i,j \ge 0 \right \} по модулю r. Данная подгруппа уже содержит (n,r)=(p,r)=1. Так же  \mathcal j G \mathcal j = t . Группа G сгенерированна n, p по модулю r начиная с o_r(n) > \log^2 n ,  t > log^2 n .
Вторая группа - \zeta. Данная группа является набором всех вычетов полиномов в P (пространстве простых чисел) по модулю h(X) и p. Эта группа сгенерированна элементами X, X+1, X+2, ..., X+l в поле  F = \frac{F_p[X]}{h(X)} и является подгруппой мультипликативной группы Fp. Где Fp - конечное поле.

Леммы

  1. Пусть а, n ∈ ℤ, n ≥ 2, и (a,n) = 1. Тогда n является простым тогда и только тогда, когда
    (X + a)nXn + a (mod n)
  2. Пусть НОК(m), обозначает наименьшее общее кратное первых m чисел. Тогда для m ≥ 7 справедливо неравенство:
    НОК(m) ≥ 2m
  3. Если n простое, то алгоритм вернет prime.
  4. Существует r такое, что  r \le \max \mathcal f 3,\mathcal d \log^5 n \mathcal e \mathcal g , такое что  o_r(n) > \log^2n.
  5. Для полинома  f(X) и числа  m \in N , говорится что m включено в  f(X) , если  \mathcal d f(X) \mathcal e^m \equiv f(X^m) \pmod {X^r-1,\,p}
  6. Если числа m и m' включены в  f(X) , то их произведение m \cdot m' также включено
  7. Если число m включено в  f(X) и  g(X) , то m так же включено в  f(X) \cdot g(X)
  8. (Лемма Х. Ленстры (англ.))  \mathcal j \zeta \mathcal j \ge \left ( ^{t+l} _{t-1} \right )
  9. Если n не является степенью p, то  \mathcal j \zeta \mathcal j \le n^\sqrt{t}
  10. Если алгоритм возвращает prime, то n простое

Доказательства

Лемма 1

(X+a)^n=\sum^{n}_{i=0} {C^{i}_{n}X^{i}a^{n-i}}, однако известно, для простого n выполняется  C^{i}_{n}=0 (\bmod n) при  1 \le i \le {n-1} . Кроме того,  a^n=a (\bmod n). Если же n составное, a q его простой делитель, то коэффициент при X^q в левой части выражения не равен 0.

Лемма 3

Если n простое, то на шагах 1 и 3 алгоритм никогда не выдаст COMPOSITE. По лемме 1 цикл алгоритма, так же не выдаст COMPOSITE. Следовательно, алгоритм определит, что n простое на шаге 4 или 6.

Лемма 4

Обозначим  K=log^2n и рассмотрим произведение  P=n*\prod^{K}_{j=1} {n^j-1} . Число P делится на некоторое r тогда и только тогда, когда либо n делится на r, либо при каком-то j выполняется n^j=1\bmod {r}. Оценим величину  {P=n*\prod^{K}_{j=1} {n^j-1}}  < {n*\prod^{K}_{j=1} {n^j}} = {\prod^{K+1}_{j=1} {n^j}}  = {n^{\sum^{K+1}_{j=2} {j}}} . Так как  \sum^{K+1}_{j=2} {j} = \frac{K*(K+3)}{2} < K^2 , то  P < n^{K^2} \le n^{\log^4 n} = 2^{\log^5 n} . Возможны два случая: либо НОД( n, r)=1(НОД(n,r) обозначается как (n,r)) , и тогда r — то самое, о существовании которого говорит лемма, либо ( n, r) > 1 . В последнем случае заметим, что P делится на n и не делится на r, значит, делится на ( n, r) и не делится на  s = \frac{r}{(n,r)} . Число s и будет требуемым, так как НОД( s,n)=1.

Лемма 10

Предположим, что алгоритм выдал PRIME. По лемме 8, для  t = \mathcal j G \mathcal j и  l = \mathcal b \sqrt{\varphi (r)} \log n \mathcal c :
 \mathcal j \zeta \mathcal j \ge \left ( ^{t+l} _{t-1} \right ) \ge \left ( ^{l+1+\mathcal b \sqrt{t} \log n \mathcal c} _{\mathcal b \sqrt{t} \log n \mathcal c} \right ) (t > \sqrt{t} log n ) \ge \left ( ^{2 \mathcal b \sqrt{t} \log n \mathcal c +1} _{\mathcal b \sqrt{t} \log n \mathcal c} \right )( l = \mathcal b \sqrt{\varphi (r)} \log n \mathcal c \ge \mathcal b \sqrt{t} \log n \mathcal c ) >  > 2^{\mathcal b \sqrt{t} \log n \mathcal c +1}(\mathcal b \sqrt{t} \log n \mathcal c > \log^2 n \ge 1 ) \ge n^{\sqrt{t}}
По лемме 9,  \mathcal j \zeta \mathcal j \le n^\sqrt{t} если n не степень числа p. По этой причине n=pk для любых k>0. Если k>1, тогда алгоритм вернет COMPOSITE в шаге 1, следовательно n=p.

Время работы алгоритма

Время работы алгоритма в наихудшем случае оценивается как \mathcal{O}(log10.5 n)[1].[уточнить]

В предположении верности гипотезы Артина, время выполнения улучшается до \mathcal{O}(log6 n).

В предположении верности гипотезы Софи Жермен, время также стремится к \mathcal{O}(log6 n).

Алгоритм требует \mathcal{O}(log7.5 n).[уточнить] Однако в 2005 году Померансом (англ.) и Ленстрой (англ.) был предложен вариант алгоритма, который выполняется за \mathcal{O}(log6 n)[3] и в 2011 году время работы алгоритма было улучшено до \mathcal{O}(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. 1 2 3 4 Manindra Agrawal, Neeraj Kayal, Nitin Saxena PRIMES is in P // Annals of Mathematics. — 2004. — Т. 160. — № 2. — С. 781–793.
  2. 1 2 3 H. W. Lenstra jr. and Carl Pomerance, "Primality testing with Gaussian periods", version of April 12, 2011.
  3. H. W. Lenstra, Jr. and Carl Pomerance, «Primality Testing with Gaussian Periods», preliminary version July 20, 2005.
  4. Robert G. Salembier and Paul Southerington, "An Implementation of the AKS Primality Test"

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Нужно решить контрольную?

Полезное


Смотреть что такое "Тест Агравала" в других словарях:

  • Тест Агравала — Каяла — Саксены — В информатике тест Агравала Каяла Саксены (или тест AKS)  это полиномиальный детерминированный тест простоты чисел, предложенный индийскими учёными Маниндрой Агарвалом, Нираджем Каялом и Нитином Саксеной и впервые опубликованный 6 августа… …   Википедия

  • Тест Агравала-Каяла-Саксены — Тест простоты Агравала Каяла Саксены (или тест простоты AKS) это первый безусловный универсальный полиномиальный детерминированный тест простоты чисел, придуманный тремя индийскими учёными Маниндрой Агарвалом, Нираджем Каялом и Нитином Саксеной и …   Википедия

  • Тест простоты — Тест простоты  алгоритм, который по заданному натуральному числу определяет, простое ли это число. Различают детерминированные и вероятностные тесты. Определение простоты заданного числа в общем случае не такая уж тривиальная задача. Только… …   Википедия

  • Тест Ферма — Тест простоты Ферма в теории чисел  это тест простоты натурального числа n, основанный на малой теореме Ферма. Содержание Если n  простое число, то оно удовлетворяет сравнению для любого a, где n не делит a. Выполнение сравнения… …   Википедия

  • Тест Миллера (теория чисел) — У этого термина существуют и другие значения, см. Тест Миллера. Не следует путать с «Тестом Миллера Рабина»  вероятностным полиномиальным тестом простоты. Тест Миллера  детерминированный полиномиальный тест простоты. В 1976 году Миллер… …   Википедия

  • Вероятностный тест простоты — Тест простоты  алгоритм, который по заданному натуральному числу определяет, простое ли это число. Различают детерминированные и вероятностные тесты. Определение простоты заданного числа в общем случае не такая уж тривиальная задача. Только в… …   Википедия

  • Тест простоты Люка — В теории чисел тест простоты Люка это тест простоты натурального числа n; для его работы необходимо знать разложение на множители. Для простого числа n простые множители числа вместе с некоторым основанием a составляют сертификат Пратта, который… …   Википедия

  • Программируемые алгоритмы —       Служебный список статей, созданный для координации работ по развитию темы.   Данное предупреждение не устанавл …   Википедия

  • Список алгоритмов — Эта страница информационный список. Основная статья: Алгоритм Ниже приводится список алгоритмов, группированный по категориям. Более детальные сведения приводятся в списке структур данных и …   Википедия

  • Простое число — Простое число  это натуральное число, имеющее ровно два различных натуральных делителя: единицу и само себя. Все остальные натуральные числа, кроме единицы, называются составными. Таким образом, все натуральные числа больше единицы… …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»