forked from vlsergey/infosec
-
Notifications
You must be signed in to change notification settings - Fork 0
/
aks.tex
58 lines (51 loc) · 4.85 KB
/
aks.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
\subsection[Детерминированный тест AKS]{Детерминированный полиномиальный \protect\\ тест AKS}
\selectlanguage{russian}
\emph{Первый} корректный, детерминированный и полиномиальный алгоритм проверки числа на простоту предложили Агравал, Каял и Саксена (Agrawal, Kayal, Saxena) в 2002 году~\cite{aks:2002}. Тест получил название \textbf{AKS}\index{тест!AKS} по фамилиям авторов. Сложность алгоритма для проверки $k$-битового числа равна
\[ O(k^{6}). \]
К сожалению, несмотря на полиномиальность сложности теста, алгоритм очень медленный и не может быть применен для чисел с большой битовой длиной в сотни--тысячи бит.
Основой теста является аналог малой теоремы Ферма для многочленов. Пусть числа $a$ и $p > 1$ взаимно простые. Тогда $p$ -- простое число тогда и только тогда, когда
\begin{equation}
\label{eq:AKS1}
(x - a)^p = x^p - a \mod p.
\end{equation}
Действительно, если $p$ -- простое, то биномиальные коэффициенты $\binom{p}{i}, i = 2, \dots, p-1,$ в разложении левой части делятся на $p$, то есть ~ $\binom{p}{i} = 0 \mod p$, ~ а ~ $a^p = a \mod p$ по малой теореме Ферма. Следовательно, равенство верно.
Пусть число $p$ составное. Представим его в виде $p = A q^r$ с взаимно простыми $A$ и $q$ для некоторого простого $q$. Тогда коэффициент $\binom{p}{q}$ равен
\[\Large \begin{array}{rl}
\binom{p}{q} & =~ \frac{(A q^r) (A q^r - 1)(A q^r - 2) \dots (A q^r - q + 1)}{q (q-1)(q-2) \cdots 1} ~= \\
& \\
& =~ \frac{A q^r}{q} \cdot \frac{A q^r - 1}{q-1} \cdot \frac{A q^r - 2}{q-2} \cdot ~\cdots~ \cdot \frac{A q^r - q + 1}{1}. \\
\end{array} \]
Первый множитель $A q^r$ в числителе делится на $q$, далее идут $q-1$ последовательно убывающих чисел, которые не делятся на $q$. Значит, $\binom{p}{q}$ не делится на $A q^r$, ~ $\binom{p}{q} \neq 0 \mod p$. Следовательно,
\[
(x - a)^p \neq x^p - a \mod p.
\]
Непосредственная проверка равенства \eqref{eq:AKS1} является трудоемкой из-за необходимости проверить все коэффициенты. Рассмотрим следующую модификацию теста, которая тоже имеет полиномиальную сложность. Пусть для некоторого числа $r \nmid n$ ($r$ не делит $n$) выполняется равенство
\begin{equation}
\label{eq:AKS2}
(x - a)^p = x^p - a \mod (x^r-1, p).
\end{equation}
Другими словами, пусть
\[ (x - a)^p - (x^p - a) = (x^r-1) \cdot f(x) + p \cdot g(x) \]
для некоторых многочленов $f(x)$ и $g(x)$. Тогда либо $p$ -- простое, либо $p^2 = 1 \mod r$.
Описание теста AKS приведено в алгоритме \ref{alg:aks}.
\begin{algorithm}[h!]
\caption{Детерминированный полиномиальный тест AKS.\label{alg:aks}}
\begin{algorithmic}
\STATE Вход: число $n>1$ для проверки на простоту.
\STATE Выход: \textsc{Составное} или \textsc{Простое}.
\IF{~$n = a^b, ~a, b \in \group{N}, ~ b > 1$, для некоторых $a, b$~}
\STATE \textbf{return} \textsc{Составное}.
\ENDIF
\STATE \textbf{Найти} наименьшее $r \in \group{N}$ с порядком $ord_n(r) > \log_2^2 n$. Порядок числа $r$ по модулю $n$ определяется как минимальное число $ord_n(r) \in \group{N}$: \\
\indent ~~~~~~~~~~~~~~~~~~~~~~~~~~~ $r^{ord_n(r)} = 1 \mod n$.
\IF{~$\gcd(a,n) \neq 1$ для некоторого $a \in \group{N}, ~a < r$~}
\STATE \textbf{return} \textsc{Составное}.
\ENDIF
\FOR{~$a = 1$ ~\textbf{to}~ $2 \sqrt{r} \log_2 n$~}
\IF{~$(x - a)^n ~\neq~ x^n - a \mod (x^r - 1, n)$~}
\STATE \textbf{return} \textsc{Составное}.
\ENDIF
\ENDFOR
\STATE \textbf{return} \textsc{Простое}
\end{algorithmic}
\end{algorithm}