
- •Предисловие
- •Тестирование чисел на простоту и построение больших простых чисел
- •Введение
- •Элементарные методы проверки простоты чисел
- •Тесты на простоту для чисел специального вида
- •Алгоритм Миллера
- •Вероятностные тесты на простоту
- •Современные методы проверки простоты чисел
- •Заключение. Детерминированный полиномиальный алгоритм проверки простоты чисел
- •Факторизация целых чисел с экспоненциальной сложностью
- •Введение. Метод Ферма
- •101.21.2(P-1)-метод Полларда
- •Алгоритм Ленстры
- •101.21.2(P+1)-метод Уильямса и его обобщения
- •Методы Шэнкса
- •Прочие методы. Заключение
- •Факторизация целых чисел с субэкспоненциальной сложностью
- •Введение
- •Метод Диксона. Дополнительные стратегии
- •Квадратичное решето
- •Алгоритмы решета числового поля
- •Заключение
- •Алгоритм Ленстры для факторизации целых чисел с помощью эллиптических кривых
- •Вычисление порядка группы точек эллиптической кривой над конечным полем
- •Тестирование чисел на простоту с помощью эллиптических кривых
- •Заключение
- •Алгоритмы дискретного логарифмирования
- •Введение. Детерминированные методы
- •Дискретное логарифмирование в полях Галуа
- •Дискретное логарифмирование и решето числового поля
- •Частное Ферма и дискретное логарифмирование по составному модулю
- •Заключение
- •Факторизация многочленов над конечными полями
- •Введение. Вероятностный алгоритм решения алгебраических уравнений в конечных полях
- •Решение квадратных уравнений
- •Алгоритм Берлекэмпа
- •Некоторые другие усовершенствования алгоритма Берлекэмпа
- •Заключение
- •Приведенные базисы решеток и их приложения
- •Введение. Решетки и базисы
- •LLL-приведенный базис и его свойства
- •Алгоритм построения LLL-приведенного базиса решетки
- •Некоторые приложения LLL-алгоритма
- •Заключение
- •Введение
- •LLL-алгоритм факторизации: разложение по простому модулю
- •LLL-алгоритм факторизации: использование решеток
- •LLL-алгоритм факторизации: подъем разложения
- •LLL-алгоритм факторизации: полное описание
- •Практичный алгоритм факторизации
- •Факторизация многочленов с использованием приближенных вычислений
- •Заключение
- •Введение. Дискретное преобразование Фурье и его свойства
- •Заключение
- •Целочисленная арифметика многократной точности
- •Введение. Сложение и вычитание
- •Умножение
- •Деление
- •Решение систем линейных уравнений над конечными полями
- •Введение
- •Решение систем линейных уравнений в целых числах
- •Гауссово и структурированное гауссово исключение
- •Алгоритм Ланцоша
- •Алгоритм Видемана
- •Другие методы. Заключение

32 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
т. е. ровно F элементов Z/nZ — корни xF − 1. Множество H содержит все a-гладкие числа, не превосходящие n − 1, т. е.
H H1 = {b | 1 b n, все простые делители b не превосходят a}.
Это следует из того, что если r — простое, r a, то rF(a) ≡ 1 (mod n). Само n не входит в H1, т. к. оно простое и n > a. Отсюда |H| |H1|.
Справедлив следующий результат из теории распределения простых чисел (см. для справок [148]): если обозначить (n, a) = |H1|, то при n 5, 2 a n выполнено неравенство
|
|
|
1− |
log log n |
|
|
|
|
|||
|
|
|
log a |
. |
|
|
|
|
|||
|
|
(n, a) > n |
|
|
|
|
|
|
|
||
Отсюда |
|
1− |
log log n |
|
1− |
|
log log n |
|
√ |
|
|
F |
|
log a |
|
2 log log n |
= |
|
|
||||
|
n, |
||||||||||
|
(n, a) n |
|
n |
|
|
|
так как из a > log2 n следует log a > 2 log log n. Полученное противоречие завершает наши рассуждения.
§ 1.6. Алгоритм Миллера
В работе [187] приведен алгоритм, который детерминированно проверяет простоту n за O(n1/7) арифметических операций. Тот же алгоритм можно модифицировать так, что он будет делать O(log4 n) арифметических операций; однако в этом случае его корректность опирается на справедливость расширенной гипотезы Римана. Эта гипотеза гласит, что если (a) — числовой характер по модулю m, то нули L-функции Дирихле
= ∞ (k)
L( , s) ks
k=1
в полосе 0 < Re s < 1 лежат на прямой Re s = 1/2.
Пусть f : N → R>0 — некоторая функция на множестве натуральных чисел, причем f(n) < n.
Алгоритм Миллера Af.
На входе задано нечетное число n, n > 1.
1 шаг. Проверить, выполняется ли равенство n = ms при некоторых s, m N, s 2. Если выполняется, то n — составное число, и алгоритм останавливается.
2шаг. Выполнить шаги (i)— (iii) для всех a f(n).
(i)Проверить условие a | n.
(ii)Проверить условие an−1 ≡ 1 (mod n).
§ 1.6. Алгоритм Миллера |
33 |
|
(iii) Выяснить, верно ли, что при некотором k, 1 k 2 (n − 1), |
|
|
1 < НОД an2−k1 |
− 1 (mod n), n < n. |
|
Если одно из условий (i)— (iii) выполнено, то n — составное, и алгоритм останавливается.
3 шаг. Если мы дошли до этого шага, то n — простое число.
Конец алгоритма.
Теорема 1.37. Если f(n) = c · n0,133 (где c — некоторая положительная постоянная), то алгоритм детерминированно проверяет простоту n за O(n1/7) арифметических операций. Если же f(n) = c log2 n, то алгоритм детерминированно проверяет простоту n за O(log4 n) операций в предположении справедливости расширенной гипотезы Римана.
Замечание 1.38. В работе [64] показано, что проверку 1 шага можно выполнить за (log n)1+o(1) арифметических операций.
Мы докажем вторую часть этой теоремы, следуя работе [187]. Мы будем считать, что f(n) = c log2 n для некоторой достаточно большой абсолютной постоянной c, и что n не является степенью, т. е. n = ms, m, s N, s > 1. Значение c = 2 было получено в более поздних работах, см. для справок [60, гл. 9; 101].
Пусть n — нечетное составное число, n > 1, n = pv11 . . . pvuu — разложение n на простые сомножители. Везде далее используем это обозначение. Тогда u 2.
Определение 1.39. Функция Кармайкла определяется равенством
(n) = НОК(pvi i−1 (pi − 1));
i
функция (n) определяется равенством (n) = НОК(pi − 1).
Лемма 1.40. |
|
|
|
|
|
|
|
|
i |
|
|
|
|||||
Нечетное n N удовлетворяет малой теореме |
|||||||||||||||||
|
n |
|
|
|
|||||||||||||
Ферма a ≡ a (mod |
n) для всех a N, |
(a, n) = 1, |
тогда и только |
||||||||||||||
тогда, когда (n) | n − 1. |
n |
(mod n) при (a, n) = 1 равно- |
|||||||||||||||
Доказательство. Сравнение a ≡ a |
|||||||||||||||||
сильно тому, что выполнена система сравнений |
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
an−1 ≡ 1 (mod pjvj), j = 1, . . . , k. |
|
|
||||||||||
Поскольку |
найдется |
aj N такое, что |
aj |
(mod |
|
vj) является |
пер |
- |
|||||||||
vj |
− |
1 |
|
pj |
|
||||||||||||
вообразным |
корнем |
(т. е. имеет |
порядок |
pj |
|
(pj |
− 1)), и при |
этом |
|||||||||
|
vl |
|
|
|
|
|
|
|
|||||||||
j ≡ |
1 (mod |
jl |
) при |
|
|
|
|
|
|
|
|
|
|
||||
a |
p |
|
l = j, то наша система сравнений равносильна |
||||||||||||||
тому, что (pj |
) | n − 1, j = 1, . . . , u, что равносильно (n) | n − 1. |
|
3 О. Н. Василенко

34 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
Лемма 1.41. Если (n) n − 1, то найдутся простые числа p, q такие, что
1)p | n, p − 1 n − 1 и при некотором m 1 qm | p − 1, qm n − 1;
2)если для этих p и q число a является невычетом q-й степени по модулю p (т. е. уравнение xq ≡ a (mod p) неразрешимо),
то an−1 ≡ 1 (mod n).
Доказательство. 1) По условию среди чисел pi найдется число p, очередь, означает, что найдутся
такое, что p − 1 n − 1. Это, в свою |
|
m |
| p − 1, q |
m |
n − 1. |
|
|||
простое q и натуральное m, для которых q |
|
|
|
||||||
2) Если an−1 ≡ 1 (mod n), то an−1 ≡ 1 |
(mod p). Пусть b — пер- |
||||||||
вообразный корень по модулю p, a |
≡ |
bind a |
(mod p); тогда b(n−1) ind a |
≡ |
|||||
|
|
|
|
m |
|
|
|
||
≡ 1 (mod p). Отсюда p − 1 | (ind a) (n − 1). Тогда q |
|
| (ind a) (n − 1), от- |
|||||||
куда q | ind a, что противоречит тому, что a невычет q-й степени. |
|
||||||||
Определение 1.42. Обозначим |
через |
N(p, q) |
наименьшее нату- |
ральное число a такое, что (a, p) = 1 и a есть невычет q-й степени по модулю p. Число N(p, q) определено лишь при q | p − 1.
Теорема 1.43 (см. [54]). При условии выполнения расширенной
гипотезы Римана
N(p, q) = O(log2 p).
Следствие 1.44. Если (n) n − 1 и выполняется расширенная гипотеза Римана, то случай (ii) 2 шага алгоритма обнару-
жит, что |
n |
составное. Действительно, достаточно взять |
в качестве |
a |
число N(p, q) c log2 p c log2 n; по лемме 1.41 |
an−1 ≡ 1 (mod n).
Фактически мы обосновали алгоритм Миллера и доказали теорему в случае (n) n − 1. Далее считаем, что (n) | n − 1.
Определение 1.45. Скажем, что число n имеет тип A, если найдется такой номер j, что
2 ( (n)) > 2 (pj − 1).
Иначе n имеет тип B, т. е. в этом случае для любого j, 1 j u,2 ( (n)) = 2 (pj − 1).
Лемма 1.46. Пусть n — составное типа A, простые p, q делят n, причем
2 ( (n)) = 2 (p − 1) > 2 (q − 1).
Пусть 1 < a < n, ap = −1. Тогда либо a, либо (a (n)/2 − 1) (mod n)
имеет нетривиальный наибольший общий делитель с n (т. е. этот делитель отличен от 1 и n).

§ 1.6. Алгоритм Миллера |
35 |
Доказательство. Заметим, что 2 ( (n)) 2, поскольку 2 (q − 1)
1. Пусть (a, n) = 1. Так как q − 1 2(n) , то a (n)/2 ≡ 1 (mod q). Кроме того,
a (n)/2 ≡ ±1 (mod p).
Если a (n)/2 ≡ 1 (mod p), то (ind a) · (n)/2 ≡ 0 (mod p − 1), где ind a — индекс a (mod p) по отношению к какому-либо первообразному корню
в Z/pZ. Так как 2 ( (n)) = 2 (p − 1), то ind a — четен; значит, |
|
a |
= 1, |
p |
|||
что противоречит условию. Итак, |
|
|
|
a (n)/2 ≡ 1 (mod q), a (n)/2 ≡ −1 (mod p). |
|
|
|
Поэтому (a (n)/2 − 1, n) делится на q и не делится на p, что и требовалось доказать.
Лемма 1.47. Пусть n — составное число типа B, простые числа p и q делят n, p = q, и число a удовлетворяет условиям
1 < a < n, |
pq |
= −1. |
||
|
|
a |
|
|
Тогда либо a, либо (a (n)/2 − 1) |
(mod n) имеет с n нетривиальный |
|||
наибольший общий делитель. |
|
|
|
|
Доказательство. Пусть (a, n) = 1, и предположим, не ограничивая
общности, что |
a |
= |
1, |
a |
= 1. Так как n типа B, то 2 (p 1) = |
||
p |
q |
||||||
|
|
|
|
аналогично доказательству−лем- |
|||
= 2 (q − 1) = 2 ( (n)). |
−Рассуждая |
||||||
мы 1.46, получим |
|
|
|
|
|
||
a (n)/2 ≡ 1 (mod q), |
a (n)/2 ≡ −1 (mod p). |
Отсюда НОД((a (n)/2 − 1) (mod n), n) делится на q и не делится на p. Лемма доказана.
Теперь нужно обеспечить проверку утверждений лемм 1.46, 1.47,
не зная (n). |
— |
|
|
|
|
|
| |
|
|
|
|
|
| |
|
− |
|
|
||
Лемма 1.48. Пусть p |
простое число, p |
n, |
(n) |
|
n |
1, |
|||||||||||||
k |
|
|
|
|
|
|
|||||||||||||
|
|
|
2 |
|
(n) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
= |
|
|
n − 1 |
+ 1. |
|
|
|
|
|
|
|
|
|
|
|
|
|
Пусть a N, 1 < a < n, (a, n) = 1. Тогда |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
a (n)/2 ≡ a(n−1)/2k |
(mod p). |
|
|
(n) |
|
|
|
|
|
− |
|
||||||||
Замечание 1.49. Поскольку (n) четно, то 1 |
|
|
2 |
(n |
1). |
||||||||||||||
|
k |
|
|
|
|
||||||||||||||
Доказательство леммы 1.48. Поскольку a |
≡ |
1 |
|
(mod ), то |
|||||||||||||||
a (n)/2 ≡ ±1 (mod p). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
p |
3*

36 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
1) Пусть a (n)/2 ≡ 1 (mod p). У нас (n) | n − 1, и по определению k
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(n) |
|
n − 1 . |
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
2k |
|
|
|
|
|
|
|
|
|
||
Значит, утверждение леммы в этом |
случае выполнено. |
|
|
|
|
|
|
|||||||||||||||||||||||||
|
|
2) Пусть a |
(n)/2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
≡ −1 (mod p). Но тогда |
|
|
|
|
|
|
|
|
|||||||||||||||||||
|
|
a |
(n−1) |
/2k |
|
( |
(n)/2)(n−1) |
/( (n)2k−1) |
|
( 1)(n−1) |
/( (n)2k−1) (mod |
). |
|
|
||||||||||||||||||
|
|
|
|
|
|
= a |
|
|
|
|
|
|
|
|
|
|
|
|
≡ − |
|
|
|
|
p |
|
|
|
|||||
|
|
|
|
|
|
2 |
|
(n)2k−1 = |
|
|
|
|
|
|
|
|
|
k |
|
a |
|
− |
|
|
≡ |
|||||||
При этом |
|
|
|
|
n − |
1 |
|
|
0 по определению |
|
. Поэтому |
|
(n |
|
1) |
/2k |
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||
≡ −1 (mod p). |
|
|
|
|
|
|
|
|
|
| |
|
− |
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
Следствие 1.50. Пусть |
|
(n) |
n |
1, и пусть n имеет тип A. Если |
||||||||||||||||||||||||||
|
|
|
, 1 |
|
|
|
|
|
( |
a |
|
1), |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
a |
|
N, 1 < a |
< n, |
и |
|
|
p |
|
= −1, то либо (a, n) = 1, n, либо при неко- |
|||||||||||||||||||||||
тором k |
|
|
k 2 |
n − |
|
|
− 1) (mod n), n = 1, n. |
|
|
|
|
|
|
|||||||||||||||||||
|
|
|
|
|
|
|
|
|
НОД (an2−k1 |
|
|
|
|
|
|
Поэтому, если в ходе перебора в алгоритме Миллера мы дойдем до этого значения a, то в пункте (iii) 2 шага алгоритма будет обнаружено, что n — составное. Очевидно, что наименьшее такое a = N(p, 2) = O(log2 p) c log2 n (по теореме 1.43, сформулированной выше) содержится среди перебираемых в алгоритме значений при достаточно большом c, т. е. алгоритм корректно работает для n типа A.
a |
Следствие 1.51. Пусть (n) |
| |
n |
− |
1, и пусть n имеет тип B. Если |
|||||||
|
|
, 1 |
(pq |
1),− |
|
|
|
|
|
|
||
|
N, 1 |
< a < n, и |
a |
= |
1, то либо (a, n) = 1, n, либо при неко- |
|||||||
|
|
|||||||||||
тором k |
|
k 2 |
n − |
|
|
− 1) (mod n), n = 1, n. |
||||||
|
|
|
|
НОД (an2−k1 |
Поэтому для доказательства корректности алгоритма Миллера для n типа B нужна оценка сверху для величины
1(pq) = min a |
a N, |
pq |
= −1 . |
||||
|
|
|
|
|
a |
|
|
Теорема 1.52 (см. [54]). |
|
условии выполнения расширенной |
|||||
|
При |
гипотезы Римана
N(pq) = O(log2 pq).
Следовательно, в алгоритме Миллера для n типа B значение a = N(pq) c log2 n будет найдено, и в пункте (iii) 2 шага будет обнаружено, что n — составное.