- •Предисловие
- •Тестирование чисел на простоту и построение больших простых чисел
- •Введение
- •Элементарные методы проверки простоты чисел
- •Тесты на простоту для чисел специального вида
- •Алгоритм Миллера
- •Вероятностные тесты на простоту
- •Современные методы проверки простоты чисел
- •Заключение. Детерминированный полиномиальный алгоритм проверки простоты чисел
- •Факторизация целых чисел с экспоненциальной сложностью
- •Введение. Метод Ферма
- •101.21.2(P-1)-метод Полларда
- •Алгоритм Ленстры
- •101.21.2(P+1)-метод Уильямса и его обобщения
- •Методы Шэнкса
- •Прочие методы. Заключение
- •Факторизация целых чисел с субэкспоненциальной сложностью
- •Введение
- •Метод Диксона. Дополнительные стратегии
- •Квадратичное решето
- •Алгоритмы решета числового поля
- •Заключение
- •Алгоритм Ленстры для факторизации целых чисел с помощью эллиптических кривых
- •Вычисление порядка группы точек эллиптической кривой над конечным полем
- •Тестирование чисел на простоту с помощью эллиптических кривых
- •Заключение
- •Алгоритмы дискретного логарифмирования
- •Введение. Детерминированные методы
- •Дискретное логарифмирование в полях Галуа
- •Дискретное логарифмирование и решето числового поля
- •Частное Ферма и дискретное логарифмирование по составному модулю
- •Заключение
- •Факторизация многочленов над конечными полями
- •Введение. Вероятностный алгоритм решения алгебраических уравнений в конечных полях
- •Решение квадратных уравнений
- •Алгоритм Берлекэмпа
- •Некоторые другие усовершенствования алгоритма Берлекэмпа
- •Заключение
- •Приведенные базисы решеток и их приложения
- •Введение. Решетки и базисы
- •LLL-приведенный базис и его свойства
- •Алгоритм построения LLL-приведенного базиса решетки
- •Некоторые приложения LLL-алгоритма
- •Заключение
- •Введение
- •LLL-алгоритм факторизации: разложение по простому модулю
- •LLL-алгоритм факторизации: использование решеток
- •LLL-алгоритм факторизации: подъем разложения
- •LLL-алгоритм факторизации: полное описание
- •Практичный алгоритм факторизации
- •Факторизация многочленов с использованием приближенных вычислений
- •Заключение
- •Введение. Дискретное преобразование Фурье и его свойства
- •Заключение
- •Целочисленная арифметика многократной точности
- •Введение. Сложение и вычитание
- •Умножение
- •Деление
- •Решение систем линейных уравнений над конечными полями
- •Введение
- •Решение систем линейных уравнений в целых числах
- •Гауссово и структурированное гауссово исключение
- •Алгоритм Ланцоша
- •Алгоритм Видемана
- •Другие методы. Заключение
48 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
На основе изложенного в данной главе материала можно сделать вывод о том, что в нашем распоряжении имеются быстрые и эффективные алгоритмы для проверки простоты чисел и построения больших простых чисел.
§1.9. Заключение. Детерминированный полиномиальный алгоритм проверки простоты чисел
К тому моменту, когда большая´ часть этой книги уже была написана, появилась замечательная работа индийских математиков Агравала, Кайала и Саксены [50], в которой получен детерминированный алгоритм проверки простоты натуральных чисел, имеющий сложность O(log12 n(log log n)c) арифметических операций (n — проверяемое на простоту число, c — некоторая абсолютная константа). Далее мы приводим описание и обоснование этого алгоритма. Символ
—
O(t(n)) мы будем использовать для обозначения O(t(n) log n), где какая-либо положительная постоянная.
Алгоритм работы [50] основан на следующей теореме.
Теорема 1.71. Пусть p — нечетное натуральное число, a Z, (a, p) = 1. Число p является простым тогда и только тогда, когда
(x − a)p ≡ xp − a (mod p) |
(1.3) |
(соотношение (1.3) означает, что коэффициенты многочленов сравнимы по модулю p).
Доказательство. Очевидно, что
p−1 |
pi xi (−a)p−i + a − ap. |
(1.4) |
(x − a)p − (xp − a) = i=1 |
||
|
|
|
Если p — простое число, то соотношение (1.3) следует из (1.4), так
как при 1 i p − 1 число |
p |
делится на p. |
|
i |
|||
Пусть соотношение (1.3) |
выполнено, |
и предположим, что p — со- |
|
ставное. Тогда найдется простое число q и натуральное k такие, что qk p, причем q < p. Очевидно, что qk не делит
q |
= p p − |
1) |
. .q. |
!p − q + |
1) |
, |
|
p |
|
( |
|
( |
|
||
и поэтому коэффициент при xq в (1.4) не делится на p, что противоречит выполнению (1.3). Теорема доказана.
§ 1.9. Заключение. Детерминированный полиномиальный алгоритм |
49 |
Символом P(m) мы обозначаем наибольший простой делитель на-
турального числа m. Через or (m) мы обозначаем порядок m (mod r) в группе (Z/rZ) .
Лемма 1.72. Пусть p и r — различные простые числа. Тогда
1)для каждого t N группа GF(pt) является циклической;
2)для каждого многочлена f(x) Z [x] выполнено соотношение
|
|
|
|
|
|
|
f(x)p ≡ f(xp) (mod p); |
|
||
3) |
если h(x) Z [x], h(x) | xr − 1, m1, m2 Z 0, m ≡ mr (mod r), то |
|||||||||
|
|
|
|
|
|
|
xm ≡ xmr (mod h(x)); |
|
||
4) |
если o |
(p) |
— |
порядок p (mod r) |
|
(Z rZ) , то в Z pZ [x] мно- |
||||
|
|
x |
r |
r |
|
|
/ |
/ |
||
гочлен |
|
− 1 |
раскладывается на различные неприводимые мно- |
|||||||
|
|
|||||||||
|
|
x − 1 |
|
|
|
|
|
|
||
гочлены, каждый из которых имеет степень or (p).
Доказательство. Первое и второе утверждения леммы общеиз-
вестны. |
mr mr |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
kr |
|
|
|||
Пусть |
, |
|
= m + kr, |
где |
|
|
|
Z |
. |
|
Поскольку |
|
|
≡ |
|||||||||||||
|
|
|
|
mkr+mr r |
mr |
|
|
|
|
k 0 |
|
|
|
|
|
|
|
|
x |
|
|||||||
≡ 1 (mod x − 1), то x |
≡ x |
|
|
(mod h(x)), что доказывает |
третье |
||||||||||||||||||||||
утверждение леммы. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
xr − 1 |
|
|||||||
Положим d = or (p). Пусть h(x) — неприводимый делитель |
|
|
|||||||||||||||||||||||||
в Z/pZ [x], deg h(x) = k. Тогда |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x − 1 |
||||||||||
|
|
|
|
|
|
Z/pZ [x]/(h(x)) = GF(pk), |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
(Z/pZ [x]/(h(x))) = g(x) |
|
(mod h(x)) |
pk−1, |
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
d |
≡ |
|
где g(xd) — некоторый многочлен из Z/pZ [x]. Очевидно, что g(x)pd |
|||||||||||||||||||||||||||
( |
p |
) (mod h(x)). Поскольку |
p |
d |
≡ 1 |
(mod |
) и |
|
( ) |
| x |
r |
− |
1, то |
x |
p |
≡ |
|||||||||||
≡ g x |
|
|
|
|
d |
|
r |
h x |
|
|
|
|
|||||||||||||||
≡ x d(mod |
h(x)). Следовательно, |
g(x)p |
|
≡ g(x) |
(mod h(x)), |
откуда |
|||||||||||||||||||||
g(x)p |
−1 ≡ 1 (mod |
h(x)). Это означает, |
|
что |
pk − 1 | pd − 1, и |
поэто- |
|||||||||||||||||||||
му k | d. |
r |
≡ 1 (mod h |
(x)) в Z/pZ |
[x]. Поскольку x |
r |
− 1 не имеет крат- |
|||||||||||||||||||||
Далее, x |
|
|
|||||||||||||||||||||||||
ных неприводимых делителей в Z/pZ [x], то h(x) = x − 1. Следовательно, порядок x (mod h(x)) равен простому числу r. Это, в свою очередь, означает, что r | pk − 1 = |GF(pk) |, т. е. pk ≡ 1 (mod r). По определению d тогда d | k.
Из доказанного выше следует, что k = d. Четвертое утверждение леммы доказано.
Следующие две леммы содержат некоторые результаты о распределении простых чисел.
4 О. Н. Василенко
50 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
Лемма 1.73. Существуют положительная постоянная c0 и натуральное число n0 такие, что для всех x n0 выполнено неравенство
#{p | p — простое, p x, P(p − 1) > x2/3} logc0xx .
Доказательство можно найти в работах [123; 61].
Лемма 1.74. При всех m 2 выполнено неравенство
m |
|
(m) |
8m |
, |
6 log |
m |
log m |
||
2 |
|
2 |
|
|
где (m) — функция Чебышёва. Доказательство см. в [55].
Теперь опишем алгоритм проверки простоты натуральных чисел.
Алгоритм.
На входе задано нечетное число n N, n > 1.
1 шаг. Если n имеет вид ab, где a N, b N, b 2, то выдать сообщение о том, что n составное, и закончить работу. (В работе [64] показано, что этот шаг может быть выполнен за O(log n1+o(1)) арифметических операций.)
2 |
шаг. r := 2. |
|
|
|
|
||||
3 |
шаг. Для текущего значения r выполнить шаги 4—8. |
||||||||
4 |
шаг. Если r < n и НОД(r, n) > 1, то n — составное; в этом случае |
||||||||
закончить работу с выдачей сообщения о том, что n — составное. |
|||||||||
5 |
шаг. Если r — простое число, то выполнить шаги 6—7, иначе пе- |
||||||||
рейти на шаг 8. |
|
|
|
|
|||||
6 |
шаг. Найти q — наибольший простой делитель числа r − 1. |
||||||||
|
√ |
|
|
|
|
r−1 |
|
|
|
7 |
|
|
|
|
q |
≡ 1 (mod r), то перейти к 9 шагу |
|||
шаг. Если q 4 r log2 n и n |
|
||||||||
с данным значением r. |
|
|
|
|
|||||
8 |
шаг. r := r + 1. Если r n, то выдать сообщение, что n — простое, |
||||||||
и закончить работу. Иначе вернуться на 3 шаг. |
|||||||||
9 |
шаг. 1 случай. Если n − 1 |
√ |
|
log2 n], то для всех a из проме- |
|||||
[2 |
r |
||||||||
жутка r < a n − 1 проверить выполнение условия (a, n) = 1. |
|||||||||
|
|
|
√ |
|
|
|
|
|
|
2 |
случай. Если n − 1 > [2 |
r |
log2 n], то для всех a из промежутка |
||||||
√
1 a [2 r log2 n] проверить выполнение соотношения (x − a)n ≡ xn − a (mod xr − 1)
в кольце Z/nZ [x]. Если для некоторого a в 1-м случае выполнено неравенство (a, n) > 1, либо во 2-м случае соотношение по модулю xr − 1 не выполняется, то n — составное, и алгоритм заканчивает работу.
§ 1.9. Заключение. Детерминированный полиномиальный алгоритм |
51 |
10 шаг. Если мы дошли до этого шага, то число n — простое.
Конец алгоритма.
Теорема 1.75. Алгоритм верно определяет, является ли число n простым или составным. При этом рассматриваемые в нем значения r не превосходят A log6 n для некоторой абсолютной константы A.
Для доказательства теоремы 1.75 нам потребуется еще несколько лемм.
Лемма 1.76. Существуют абсолютные положительные постоянные c1, c2 такие, что если число n достаточно вели-
ко, |
то на отрезке [c1 log26 n; c2 log26 n] найдется простое |
чис- |
ло |
r, удовлетворяющее следующим условиям: либо r | n, |
либо |
у r − 1 есть простой делитель q, удовлетворяющий неравенству
√
q 4 r log2 n, такой, что q | or (n) и n(r−1)/q ≡ 1 (mod r).
Доказательство. Рассмотрим простые числа r, лежащие на от-
резке [c1 log26 n; c2 log26 n] и удовлетворяющие неравенству |
|
P(r − 1) > (c2 log26 n)2/3, |
(1.5) |
где c1 и c2 — некоторые положительные постоянные, которые мы выберем позже; такие простые числа мы назовем специальными. Их количество не меньше, чем количество простых чисел на отрезке [1; c2 log62 n], удовлетворяющих (1.5), минус количество всех простых чисел на отрезке [1; c1 log62 n]. С помощью лемм 1.73 и 1.74 получим, что количество специальных простых чисел будет не меньше, чем
c0c2 log26 n |
− |
8c1 log26 n |
|
|
c0c2 log26 n |
− |
8c1 log26 n |
= |
|||||||
log2 c2 + 6 log2 log2 n |
log2 c1 + 6 log2 log2 n |
7 log2 log2 n |
6 log2 log2 n |
||||||||||||
|
|
= |
log26 n |
|
|
c0c2 |
− |
8c1 |
= c3 |
log26 n |
|
, |
|||
|
|
log2 log2 n |
7 |
6 |
|
log2 log2 n |
|||||||||
если число n достаточно велико. Мы будем считать, что c1 > 46, c2 > c1,
и что c3 |
> 0. Пусть x = c2 log6 n. Обозначим через Π произведение |
|
||||
|
2 |
|
|
|
|
|
|
2 |
3 |
− 1) . . . (n |
[x1/3] |
− 1). |
(1.6) |
|
Π = (n − 1) (n |
− 1) (n |
|
|||
В этом произведении [x1/3] сомножителей, и каждый состоит из произведения не более чем log2 (nx1/3 − 1) x1/3 log2 n простых чисел. Поэтому Π состоит из произведения не более чем x2/3 log2 n простых. Далее,
x2/3 log |
n = c2/3 log5 n < c3 |
log26 n |
|
|
|||
2 |
2 |
2 |
log2 log2 n |
|
|
|
|
4*
52 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
при всех достаточно больших n. Значит, хотя бы одно специальное простое r не делит Π. Покажем, что оно будет удовлетворять утвер-
ждению леммы. Пусть r n. Тогда nr−1 |
≡ |
1 (mod r). Из (1.5) следует, что |
||||||||||||
( |
1) |
2/3 |
|
|
|
|
|
|
|
такой, что |
2/3. |
|||
P r − |
|
> r |
, т. е. r − 1 имеет простой делитель q 6 |
q > r |
||||||||||
Заметим, что |
2/3 |
√ |
|
|
|
|
|
|
|
6 |
||||
r |
4 r log2 n, поскольку r c1 log2 n и c1 > |
4 . Зна- |
||||||||||||
чит, q 4√ |
|
log2 n и q2 r − 1. Если q or (n), то n(r−1)/q ≡ 1 |
(mod r), |
|||||||||||
r |
||||||||||||||
r | n(r−1)/q − 1. Покажем, что |
r −q |
1 |
[x1/3]. Действительно, r − 1 x1/3q, |
|||||||||||
так как выполнено даже более сильное неравенство
r x1/3r2/3,
поскольку r x = c2 log62 n. Из доказанного следует, что r | Π, но это противоречит выбору r. Итак, q | or (n) и n(r−1)/q ≡ 1 (mod r). Лемма доказана.
Замечание 1.77. Из леммы 1.76 следует, что если n достаточно велико, то на 3 шаге алгоритма либо обнаружится, что n составное, либо найдется простое число r, r c2 log62 n, такое, что у r − 1 есть простой делитель q, удовлетворяющий условиям 7 шага.
Лемма 1.78. Если число n — простое, то алгоритм закончит работу с выдачей сообщения о том, что n — простое.
Доказательство. Если n не очень велико, то алгоритм может просто перебрать все значения r < n и на 8 шаге при r = n выдать сообщение о том, что n — простое; либо мы перейдем к 9 шагу с некоторым значением r и (по теореме 1.71) тесты 9 шага будут выполнены для всех рассматриваемых a, вследствие чего алгоритм выдаст сообщение о том, что n — простое.
Предположим теперь, что n достаточно велико. Тогда по лемме 1.76 на 3 шаге алгоритма обнаружится простое число r такое, что r c2 log62 n < n, причем r − 1 имеет простой делитель q, удовлетворяющий условиям 7 шага. На 9 шаге соотношение по модулю xr − 1 будет выполнено (по теореме 1.71) для всех рассматриваемых значений a, так как
если n достаточно велико. Значит, мы дойдем до 10 шага, и алгоритм выдаст сообщение о простоте n.
Теперь предположим, что n— составное число. Пусть n = p1 . . . pk — разложение n на простые множители (не обязательно различные). Допустим, что в ходе перебора значений r на 3 шаге мы не обнаружили, что n составное, нашли простые числа r и q, удовлетворяющие условиям 6 и 7 шагов и перешли к 9 шагу. Поскольку q | or (n)
§ 1.9. Заключение. Детерминированный полиномиальный алгоритм |
53 |
и or (n) | НОК(or (pi)), то существует простое число p, делящее n, такое,
i
что q | or (p). Зафиксируем это p.
√
Положим l = [2 r log2 n], и пусть l < n − 1. На 9 шаге мы перебираем значения a, 1 a l. По п. 4 леммы 1.72 в Z/pZ [x] существует неприводимый многочлен h(x), делящий xr − 1, причем deg h(x) = d = or (p) 2 (так как q делит d). Если соотношение по модулю xr − 1 на 9 шаге для какого-то конкретного a будет выполнено, то будет выполнено и соотношение
|
|
|
|
(x − a)n ≡ xn − a (mod h(x)) |
(1.7) |
|||||
в |
кольце |
[ |
|
], т. е. |
( |
)n |
= x |
n |
− a в поле (Z/pZ [x])/(h(x)) = |
|
d |
Z/pZ x |
|
x − a |
|
||||||
= GF(p ). При этих предположениях и обозначениях докажем лем- |
||||||||||
мы 1.79—1.81. |
|
|
|
|
|
|
|
G |
||
|
Лемма |
1.79. Рассмотрим |
мультипликативную группу |
|||||||
((Z/pZ [x])/(h(x))) , |
(mod h(x)) | a Z 0, a = 1, . . . , l , |
|
||||||||
|
G = a=1 |
(x − a) a |
|
|||||||
|
|
l |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
a = 1, . .l. , l. Эта группа являет- |
|||
порожденную биномами x − a, |
||||||||||
ся циклической. Кроме того, |G| > (d/l) , если алгоритм доходит |
||||||||||
до 9-го шага и l < n − 1. |
|
|
|
|
|
x − |
||||
|
Доказательство. Поскольку deg h(x) 2, то элементы |
|||||||||
−a (mod h(x)) имеют конечный порядок в ((Z/pZ [x])/(h(x))) , и G является группой. Так как G — подгруппа циклической группы GF(pd) , то она тоже является циклической.
Покажем, что элементы подмножества
S = |
l |
(x − a) a (mod h(x)) |
l |
a d − 1 |
a=1 |
a=1 |
|||
|
|
|
|
|
|
|
|
|
|
группы G различны в (Z/pZ [x])/(h(x)), если |
алгоритм дошел до вы- |
|||
полнения 9 шага и √l < n − 1. На 9 шаге будет проверяться условие 2 случая и r > q 4 r log2 n 2l. При этом рассматриваемые значения a различны по модулю p, так как если a1 ≡ a2 (mod p), a1 < a2, то p a2 − a1 < l < r, и тогда мы бы уже на 4-м шаге для значения r1 = p < r обнаружили, что n — составное. Итак, величины a (mod p)
l
различны. Поэтому многочлены
a=1
личны, а так как l a d − 1 < deg h(x), то и элементы множества S
a=1
54 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
различны в (Z/pZ [x])/(h(x)). Поскольку в множестве S содержится
|
l + d − 1 |
элементов и |
|
|
l + d − 1 |
> |
|
d |
|
l, то |
G |
|
|
( )l. |
|
|||||||
|
|
|
|
l |
|
|
||||||||||||||||
|
|
. |
|
|
|
|
|
|
|
|
|
S > d/l |
− |
|||||||||
|
l |
|
|
|
|
|
lвыполнения |
9 шага,| |причем| | |
|
1. Так |
||||||||||||
|
|
|
|
|
l < n |
|
||||||||||||||||
|
Пусть алгоритм дошел до |
|
|
|
|
|
|
|
|
|||||||||||||
|
|
. |
√ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
r log2 n 2l, то d 2l и |
|
|
|
|
|
|
||||||||||||||
как d = or (n) . q, q |
4 |
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
√ |
|
|
|
√ |
|
|
|
√ |
|
|
|
|
|
||
|
|
|G| > 2l = |
2[2 |
|
r |
log2 n] > 22 |
|
r |
log2 n−1 |
= n2 |
r |
/2. |
|
|
(1.8) |
|||||||
Пусть g(x) — образующий циклической группы G. Его порядок будет
√
больше n2 r/2. Положим
Ig(x) = {m | m Z 0, g(x)m ≡ g(xm) (mod xr − 1) в кольце Z/pZ [x]}.
Лемма 1.80. Множество Ig(x) замкнуто относительно умножения.
Доказательство. Пусть m1, m2 Ig(x) . Тогда в кольце Z/pZ [x] выполнены сравнения
g(x)m1 ≡ g(xm1) (mod xr − 1), g(x)m2 ≡ g(xm2) (mod xr − 1). Подставим xm1 вместо x во второе сравнение. Тогда
g(xm1)m2 ≡ g(xm1m2) (mod xrm1 − 1),
откуда
g(xm1)m2 ≡ g(xm1m2) (mod xr − 1).
Поэтому
g(x)m1m2 ≡ (g(x)m1)m2 ≡ (g(xm1))m2 ≡ g(xm1m2) (mod xr − 1),
т. е. m1m2 Ig(x) .
Лемма 1.81. Пусть og — порядок g(x) в Z/pZ [x]/(h(x)). Пусть m1, m2 Ig(x) . Тогда из сравнения m1 ≡ m2 (mod r) следует, что
m1 ≡ m2 (mod og).
Доказательство. Пусть m2 > m1. Тогда m2 = m1 + kr, где k Z 0. Так как в кольце Z/pZ [x] выполнено соотношение g(x)m2 ≡ g(xm2) (mod xr − 1) и h(x) | xr − 1, то g(x)m2 ≡ g(xm2) (mod h(x)). Отсюда
g(x)m1 g(x)kr ≡ g(xm1+kr) ≡ g(xm1) (mod h(x)).
Так как m1 Ig(x) , то получаем, что g(x)kr ≡ 1 (mod h(x)), т. е. kr ≡ ≡ 0 (mod og). Из этого следует утверждение леммы.
Замечание 1.82. Из леммы 1.81 вытекает, что в Ig(x) лее чем r чисел, меньших og.
Лемма 1.83. Если число n — составное, то алгоритм закончит работу с выдачей сообщения о том, что n — составное.
§ 1.9. Заключение. Детерминированный полиномиальный алгоритм |
55 |
Доказательство. Предположим, алгоритм выдал сообщение, что n — простое. Это не может произойти на шаге 8, так как тогда мы проверили бы условия шага 4 для всех r < n и нашли бы делитель n.
Поэтому алгоритм дошел до шага 10. Значит, был выполнен шаг 9.
√
Если n − 1 [2 r log2 n], то на шаге 9 мы бы обнаружили a, a n − 1,
такое, что (a, n) > 1, и алгоритм сообщил бы, что n составное. Значит, |
||||||
√ |
|
log2 n] < n − 1, и для всех a, 1 a [2 |
√ |
|
log2 n] = l, выполнено |
|
[2 |
r |
|
r |
|||
соотношение: |
|
|
|
|
||
|
|
(x − a)n ≡ xn − a (mod xr − 1) |
в Z/pZ [x]. |
(1.9) |
||
Тогда в обозначениях лемм 1.80 и 1.81 (где g(x) — по-прежнему образующий элемент группы G) получим, что
g(x)n ≡ g(xn) (mod xr − 1) в Z/pZ [x],
поскольку g(x) есть произведение биномов x − a, для которых выполнено (1.9). Значит, n Ig(x) . Также по п. 2 леммы 1.72 p Ig(x) ; кроме
того, 1 Ig(x) . |
|
|
|
|
|
i |
j |
| 0 |
√ |
|
|
. По лемме 1.80 |
|
|
|
|
|
|
|||||||
Рассмотрим множество E = |
n p |
|
i, j [ r] |
|||||||||
|
| |
| |
√ |
2 |
|
|
|
две различные пары |
||||
E Ig(x) . Так как |
E = ([ r] + 1) > r, то найдутся |
|
|
|
||||||||
(i1, j1), (i2, j2), такие, что ni1 pj1 |
≡ ni2 pj2 |
(mod r). Тогда по лемме 1.81 |
||||||||||
ni1 pj1 ≡ ni2 pj2 |
(mod og). Так как og делит pd − 1 = |(Z/pZ [x]/(h(x))) |, |
|||||||||||
то p og, и элемент p (mod og) обратим в Z/ogZ. Не ограничивая общности, будем считать, что j2 j1. Тогда
ni1 |
≡ ni2 pj2−j1 |
(mod og). |
(1.10) |
||||||||||||||||||||||
Поскольку 3 p n/3, справедливы неравенства |
|
||||||||||||||||||||||||
i1 |
|
|
|
[√ |
|
|
] |
|
√ |
|
|
2√ |
|
|
|
|
|
|
|
|
|
||||
n |
r |
|
r |
|
r |
/2, |
|
|
|
||||||||||||||||
n |
|
|
|
|
|
n |
|
n |
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
[√ |
|
|
|
|
√ |
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
n |
|
r |
] |
|
|
n2[ |
r |
] |
|
|
|
|
|||||
ni2 pj2−j1 n[√r] |
|
|
= |
n2√r/2. |
|
||||||||||||||||||||
|
|
|
|
3[√ |
|
] |
|
|
|||||||||||||||||
3 |
|
|
|
|
|
|
|||||||||||||||||||
|
|
|
r |
|
|
||||||||||||||||||||
Из (1.10) и (1.8) следует теперь, что
ni1 = ni2 pj2−j1 . (1.11)
Поскольку p — простой делитель натурального числа n, то из (1.11) вытекает, что составное число n является степенью p. (Действительно, если у числа n есть простой делитель s, s = p, то из (1.11) следует, что i1 = i2. Но тогда и j1 = j2, что противоречит условию (i1, j1) = (i2, j2).) Однако такие составные числа мы обнаруживаем уже на шаге 1 алгоритма. Полученное противоречие доказывает лемму.
Теперь докажем теорему 1.75. Корректность работы алгоритма следует из лемм 1.78 и 1.83. Неравенство r A log6 n для небольших
56 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
значений n обеспечивается за счет выбора постоянной A, а для всех достаточно больших n в силу леммы 1.76 можно рассматривать rc2 log62 n. Теорема 1.75 полностью доказана.
Оценим количество арифметических операций, требуемых для выполнения алгоритма.
Теорема 1.84. Количество арифметических операций, необхо-
12
димых для выполнения алгоритма, равно O(log n).
Доказательство. Можно считать, что n достаточно велико. Шаг 1 алгоритма выполняется за O((log n)1+o(1)) арифметических операций,
согласно [64]. Количество значений r, рассматриваемых на шаге 3, по лемме 1.76 не превосходит c2 log62 n. Для каждого r шаг 4 выпол-
няется за O(log n) арифметических операций, а шаги 5 и 6 с помо-
1/2 const = 3
щью решета Эратосфена выполняются за O(r (log r) ) O(log n). Шаг 7 выполняется за O(log r) = O(log log n) операций, шаг 8 тривиа-
лен. На шаге 9 (в силу того, что n достаточно велико) будет проверяться условие 2 случая. При этом проверка соотношения
(x − a)n ≡ xn − a (mod xr − 1)
в |
кольце |
Z/pZ [x] составляет |
с |
помощью |
бинарного |
возведения |
||||||
в |
степень |
(см. |
Приложение) |
и |
быстрого |
преобразования |
Фурье |
|||||
(см. гл. |
9) |
O(log n · r log n) операций. Поэтому 9 шаг будет |
выпол- |
|||||||||
нен за |
|
√ |
|
|
2 |
|
12 |
|
|
|
- |
|
|
|
|
|
|||||||||
O(2 r log n · r log n) = O(log n) арифметических |
операций. |
|||||||||||
Таким образом, теорема доказана. |
|
|
|
|
||||||||
|
Замечание |
1.85. Проверка |
соотношения |
2 случая 9 |
шага ал |
|
||||||
горитма может производиться и без быстрого преобразования Фурье. Оценка сложности останется полиномиальной, но несколько худшей.
Замечание 1.86. В работе [50] показано, что если выполнена некоторая гипотеза о распределении простых чисел Софи Жермен, т. е. пар простых чисел q и p = 2q + 1, то можно предложить алгоритм проверки
6
простоты чисел со сложностью O(log n). В предположении справедливости некоторой другой гипотезы можно описать алгоритм проверки
3
простоты чисел со сложностью O(log n).
Замечание 1.87. Пока не совсем ясно, будет ли описанный выше алгоритм эффективен на практике. Двенадцатая степень логарифма n в оценке сложности — это все же довольно много. Кроме того, значение параметра r в алгоритме теоретически может иметь величину порядка log6 n, и поэтому нам придется работать с многочленами высоких степеней. Результаты практической реализации данного алгоритма пока неизвестны.
