- •Предисловие
- •Тестирование чисел на простоту и построение больших простых чисел
- •Введение
- •Элементарные методы проверки простоты чисел
- •Тесты на простоту для чисел специального вида
- •Алгоритм Миллера
- •Вероятностные тесты на простоту
- •Современные методы проверки простоты чисел
- •Заключение. Детерминированный полиномиальный алгоритм проверки простоты чисел
- •Факторизация целых чисел с экспоненциальной сложностью
- •Введение. Метод Ферма
- •101.21.2(P-1)-метод Полларда
- •Алгоритм Ленстры
- •101.21.2(P+1)-метод Уильямса и его обобщения
- •Методы Шэнкса
- •Прочие методы. Заключение
- •Факторизация целых чисел с субэкспоненциальной сложностью
- •Введение
- •Метод Диксона. Дополнительные стратегии
- •Квадратичное решето
- •Алгоритмы решета числового поля
- •Заключение
- •Алгоритм Ленстры для факторизации целых чисел с помощью эллиптических кривых
- •Вычисление порядка группы точек эллиптической кривой над конечным полем
- •Тестирование чисел на простоту с помощью эллиптических кривых
- •Заключение
- •Алгоритмы дискретного логарифмирования
- •Введение. Детерминированные методы
- •Дискретное логарифмирование в полях Галуа
- •Дискретное логарифмирование и решето числового поля
- •Частное Ферма и дискретное логарифмирование по составному модулю
- •Заключение
- •Факторизация многочленов над конечными полями
- •Введение. Вероятностный алгоритм решения алгебраических уравнений в конечных полях
- •Решение квадратных уравнений
- •Алгоритм Берлекэмпа
- •Некоторые другие усовершенствования алгоритма Берлекэмпа
- •Заключение
- •Приведенные базисы решеток и их приложения
- •Введение. Решетки и базисы
- •LLL-приведенный базис и его свойства
- •Алгоритм построения LLL-приведенного базиса решетки
- •Некоторые приложения LLL-алгоритма
- •Заключение
- •Введение
- •LLL-алгоритм факторизации: разложение по простому модулю
- •LLL-алгоритм факторизации: использование решеток
- •LLL-алгоритм факторизации: подъем разложения
- •LLL-алгоритм факторизации: полное описание
- •Практичный алгоритм факторизации
- •Факторизация многочленов с использованием приближенных вычислений
- •Заключение
- •Введение. Дискретное преобразование Фурье и его свойства
- •Заключение
- •Целочисленная арифметика многократной точности
- •Введение. Сложение и вычитание
- •Умножение
- •Деление
- •Решение систем линейных уравнений над конечными полями
- •Введение
- •Решение систем линейных уравнений в целых числах
- •Гауссово и структурированное гауссово исключение
- •Алгоритм Ланцоша
- •Алгоритм Видемана
- •Другие методы. Заключение
§ 1.8. Современные методы проверки простоты чисел |
43 |
не пересекаются и равномощны. Аналогично доказательству леммы 1.67 получим неравенство |S| 14 |(Z/nZ) | = (n)/4. Лемма 1.68 доказана.
Доказательство теоремы 1.55 очевидным образом получается из лемм 1.65, 1.67, 1.68.
§1.8. Современные методы проверки простоты чисел
В начале 80-х годов Адлеман, Померанс и Румели [46] предложили детерминированный алгоритм проверки простоты чисел. Для заданного натурального числа n алгоритм делает O((log n)c log log log n) арифметических операций (c— некоторая абсолютная постоянная) и выдает верный ответ, составное n или простое. Описание схемы алгоритма можно найти также в [10]. Этот алгоритм оказался непрактичным и довольно сложным для реализации на компьютере.
Существенные теоретические упрощения алгоритма Адлемана— Померанса—Румели были получены Х. Ленстрой [164]. Он предложил детерминированный алгоритм, также делающий O((log n)c log log log n) арифметических операций. Реализация этого алгоритма позволила проверять на простоту числа n порядка 10100 за несколько минут.
Замечание 1.69. Оценка сложности в алгоритмах Адлемана—По- меранса—Румели и Ленстры является неулучшаемой, т. е. для простого числа n алгоритм выполнит не менее c1 (log n)c2 log log log n операций для некоторых положительных постоянных c1 и c2.
Приведем упрощенную и несколько модифицированную схему алгоритма Ленстры для того, чтобы читатель мог получить представление о его внутренней структуре и используемых им средствах.
Схема алгоритма Ленстры.
Алгоритм проверяет на простоту нечетное число n N, n > 1.
1 шаг. Выбираем различные простые числа p1, . . . , pk (называемые начальными простыми) так, чтобы нашлись нечетные простые числа q1, . . . , qs (называемые евклидовыми простыми), удовлетворяющие следующим условиям:
а) qj − 1 | p1 . .√. pk, j = 1, . . . , s; |
|||
б) 2q1 . . . qs |
|
n |
. |
Пример 1.70. |
9{p} =11{2, 3, 5, 7}, {q} = {3, 7, 11, 31, 43, 71, 211}, |
||
2q1 . . . qs 143 · 10 |
|
> 10 . Следовательно, данные наборы {pi},22{qj} |
можно использовать для проверки простоты всех чисел n, n 10 .
44 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
2 шаг. Проверяем, верно ли, что n = pi или n = qj для некоторого i или j. Если да, то n — простое. Иначе проверяем равенство
НОД(p1 . . . pkq1 . . . qs, n) = 1.
Если оно неверно, то n — составное.
3 шаг. Для каждой пары p, q, такой, что p | q − 1, находим первообразный корень cq по модулю q и числа a, b N, которые при p > 2 удовлетворяют следующим условиям:
ab(a + b) ≡ 0 (mod p), ap + bp ≡ (a + b)p (mod p2).
Известно, что такие a, b существуют, и обычно a = b = 1. Далее определяем числовой характер p,q по модулю q порядка p:
|
p,q |
: (Z qZ) |
→ |
C, |
p,q |
(x) = indqx |
, |
|
/ |
|
p |
|
где p = e2 i/p, indq (x) Z/(q − 1)Z, cindq qx при различных p | q − 1 порождают всю по модулю q.
Вычисляем сумму Якоби
q−1
( p,q) = − p,q (x)a p,q (1 − x)b = x=2
≡ x (mod q). Эти характеры группу числовых характеров
|
q−1 |
|
|
x |
|
− |
a indq (x)+b indq (1−x) |
. |
p |
||
|
=2 |
|
Это вычисление проводится быстро, поскольку евклидовы простые числа q невелики, и значения indqx быстро определяются перебором.
4 шаг. Для каждого начального простого числа p находим наибольшее натуральное число h = h(p), 1 h t = p (np−1 − 1), такое, что для всех q таких, что p | q − 1, выполнено сравнение
( p,q) h (n) ≡ p,q (mod nZ [ p]). |
(1.2) |
Это основной тест алгоритма. Здесь p,q — некоторый корень степени p
из 1; h (n) — некоторый явно определяемый по n элемент группового кольца Z [Gal(Q( p))], имеющий вид h (n) = ah,j j, где ah,j Z 0,
j
j Gal(Q( p)), j ( p) = jp, 1 j p − 1. При этом, если
|
p−2 |
|
l |
( p,q) = |
Al pl , Al Z, |
|
=0 |
§ 1.8. Современные методы проверки простоты чисел |
45 |
то
|
( ) |
= j |
|
|
l |
|
jl |
ah,j |
p−2 |
l |
||
( p,q) h n |
|
Al p |
|
= l=0 Bl p, |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
где Bl Z. Поскольку |
1, |
|
p, . . . |
, |
p−2 |
есть |
Z-базис |
|
||||
|
p |
|
Z-модуля Z [ p], |
мы работаем с (p − 1)-мерными векторами, имеющими целочисленные координаты. Сравнение (1.2) означает, что координаты двух таких векторов сравнимы по модулю n.
Если сравнение (1.2) не выполнено при некоторых p, q с h = 1 и
p−1 |
|
|
j−1 (mod p) , |
|
nj |
||
1 (n) = j=1 |
p |
то n — составное число (аналогом этого теста является невыполнение малой теоремы Ферма an−1 ≡ 1 (mod n)).
5 шаг. Для тех p, у которых h = h(p) < t = t(p) и при этом p,q = 1 для всех q таких, что p | q − 1, далее проверяем следующее условие:
найдется евклидово простое q, для которого p | q − 1 и при всех j = 0, 1, . . . , p − 1 элемент
( p,q) h+1 (n) − jp Z [ p],
представленный как вектор в базисе 1, p, . . . , pp−2, имеет коэффициент, взаимно простой с n.
Если это условие не выполнено, то можно показать, что на этом шаге будет найден нетривиальный делитель n.
6 шаг. Найденные на 4-м шаге числа p,q представим в виде p,q = upp,q , up,q Z 0. Затем для каждого q найдем xq такое, что для каждого p, p | q − 1, справедливо сравнение
−n p ( )xq ≡ up,q (mod p).
Здесь
p−1 |
|
( |
+ b)j |
p ( ) = j=1 |
a |
p |
|
|
|
|
|
− ajp − bjp j−1 (mod p)
— целое число, зависящее от p. Нахождение xq проводится с помощью китайской теоремы об остатках.
Далее находим v Z, 1 v < 2q1 . . . qs, удовлетворяющее системе сравнений
v ≡ 1 (mod 2), v ≡ cxqq (mod q),
где q пробегает евклидовы простые числа.
46 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
7 шаг. Для каждого j, j = 1, . . . , p1 . . . pk − 1, находим rj N, rj ≡ vj (mod 2q1 · · · qs), 0 < rj < 2q1 . . . qs,
и проверяем, делится ли наше число n на rj? Если для всех j rj n, то n — простое число.
Конец алгоритма.
Вывод. Для n проверяются некоторые тесты, обобщающие малую теорему Ферма. Если все они выполнены, то делители числа n лежат в небольшом явно описываемом множестве: это степени vj (mod 2q1 . . . qs) для некоторого явно построенного натурального числа v.
Сложность алгоритма составляет O((p1 . . . pk)const) арифметических операций, и можно показать, что для заданного n найдутся p1, . . . , pk такие, что
√
qi > n, p1 . . . pk (log n)const·log log log n.
Отсюда и получается приведенная выше оценка сложности алгоритма. Впоследствии удалось снять условие бесквадратности чисел qj − 1, что позволило использовать меньшие наборы чисел pi. Например, име-
ется 27 простых чисел qj таких, что
qj − 1 | 24 · 32 · 5 · 7,
причем qj > 1050. С этими наборами {pi} и {qj} можно проверять
j
на простоту числа n, не превосходящие 10100.
Указанные дальнейшие усовершенствования алгоритма Адлемана— Померанса—Румели и алгоритма Ленстры были предложены Ленстрой и Коеном [90]. Для алгоритма Ленстры—Коена нельзя получить оценку сложности O((log n)c·log log log n) арифметических операций без использования некоторых недоказанных гипотез. Однако на практике он оказался наиболее эффективным. При правильной организации его работы алгоритм всегда достаточно быстро выдает правильный ответ, простое n или составное. Описание и теоретическое обоснование алгоритма Лен- стра—Коена довольно-таки объемно и выходит за рамки данной книги. Этот алгоритм проверяет на простоту числа порядка 10100—10200 за несколько минут. Заметим также, что алгоритм Ленстры—Коена легко распараллелить на несколько компьютеров по количеству пар p и q.
В 1986 г. Голдвассер и Килиан [126] предложили алгоритм, позволяющий проверить простоту чисел с помощью эллиптических кривых. Этот алгоритм был существенно улучшен Аткином и Морейном [56].
§ 1.8. Современные методы проверки простоты чисел |
47 |
В работе [56] приведены результаты тестирования алгоритма Аткина— Морейна на числах порядка 10800—101000. Для проверки на простоту одного числа такой величины потребовалось несколько недель. Описание алгоритма Голдвассер—Килиана будет приведено в главе 4.
Естественным образом встал вопрос о том, является ли алгоритм Аткина—Морейна более быстрым, чем алгоритм Ленстры— Коена, а также вопрос о том, какого размера числа могут проверены на простоту каждым из этих алгоритмов за реальное время. Такие исследования проводились П. Михалеску (алгоритм Ленстры—Коена) и Ф. Морейном (алгоритм Аткина—Морейна), см. работы [185; 184; 199; 198; 195; 196].
Рекордные значения проверенных на простоту чисел для некоторого усовершенствования алгоритма Ленстры—Коена можно найти в работе [184]. С его помощью было проверено на простоту число n = (211279 + 1)/3. С помощью метода эллиптических кривых было проверено на простоту число n = (212391 + 1)/3, см. [199]. Сравнение этих двух алгоритмов проверки простоты, проведенное в [184] и [199], показывает, что алгоритм Ленстры—Коена, по-видимому, значительно быстрее. Преимущество метода эллиптических кривых заключается в том, что он предоставляет легко проверяемый сертификат простоты числа.
Несколько теоретических усовершенствований алгоритма Лен- стры—Коена было предложено в работе [16]. В ней было показано, как можно применять тригонометрические суммы Гаусса и Якоби для аддитивных и мультипликативных характеров в конечных полях для проверки ряда условий в алгоритме Ленстры—Коена.
Вработе [68] также были предложены некоторые усовершенствования алгоритма Ленстры—Коена.
Взаключение скажем еще несколько слов об одном методе проверки простоты чисел. В 1992 г. Адлеман и Хуанг [47] предложили вероятностный алгоритм, имеющий полиномиальную сложность и позволяющий проверять простоту чисел с помощью гиперэллиптических кривых. В ходе его работы приходится проводить вычисления на якобианах алгебраических кривых. Алгоритм не реализован на компью-
тере и вряд ли когда-либо будет использоваться на практике. Теоретическая оценка его сложности составляет величину порядка log75 n, где n — проверяемое на простоту число. Заметим, что лишь немногие специалисты в области алгебраической геометрии и алгебраической теории чисел понимают описание и обоснование алгоритма Адлемана— Хуанга.