
- •Предисловие
- •Тестирование чисел на простоту и построение больших простых чисел
- •Введение
- •Элементарные методы проверки простоты чисел
- •Тесты на простоту для чисел специального вида
- •Алгоритм Миллера
- •Вероятностные тесты на простоту
- •Современные методы проверки простоты чисел
- •Заключение. Детерминированный полиномиальный алгоритм проверки простоты чисел
- •Факторизация целых чисел с экспоненциальной сложностью
- •Введение. Метод Ферма
- •101.21.2(P-1)-метод Полларда
- •Алгоритм Ленстры
- •101.21.2(P+1)-метод Уильямса и его обобщения
- •Методы Шэнкса
- •Прочие методы. Заключение
- •Факторизация целых чисел с субэкспоненциальной сложностью
- •Введение
- •Метод Диксона. Дополнительные стратегии
- •Квадратичное решето
- •Алгоритмы решета числового поля
- •Заключение
- •Алгоритм Ленстры для факторизации целых чисел с помощью эллиптических кривых
- •Вычисление порядка группы точек эллиптической кривой над конечным полем
- •Тестирование чисел на простоту с помощью эллиптических кривых
- •Заключение
- •Алгоритмы дискретного логарифмирования
- •Введение. Детерминированные методы
- •Дискретное логарифмирование в полях Галуа
- •Дискретное логарифмирование и решето числового поля
- •Частное Ферма и дискретное логарифмирование по составному модулю
- •Заключение
- •Факторизация многочленов над конечными полями
- •Введение. Вероятностный алгоритм решения алгебраических уравнений в конечных полях
- •Решение квадратных уравнений
- •Алгоритм Берлекэмпа
- •Некоторые другие усовершенствования алгоритма Берлекэмпа
- •Заключение
- •Приведенные базисы решеток и их приложения
- •Введение. Решетки и базисы
- •LLL-приведенный базис и его свойства
- •Алгоритм построения LLL-приведенного базиса решетки
- •Некоторые приложения LLL-алгоритма
- •Заключение
- •Введение
- •LLL-алгоритм факторизации: разложение по простому модулю
- •LLL-алгоритм факторизации: использование решеток
- •LLL-алгоритм факторизации: подъем разложения
- •LLL-алгоритм факторизации: полное описание
- •Практичный алгоритм факторизации
- •Факторизация многочленов с использованием приближенных вычислений
- •Заключение
- •Введение. Дискретное преобразование Фурье и его свойства
- •Заключение
- •Целочисленная арифметика многократной точности
- •Введение. Сложение и вычитание
- •Умножение
- •Деление
- •Решение систем линейных уравнений над конечными полями
- •Введение
- •Решение систем линейных уравнений в целых числах
- •Гауссово и структурированное гауссово исключение
- •Алгоритм Ланцоша
- •Алгоритм Видемана
- •Другие методы. Заключение
216 |
Гл. 7. Приведенные базисы решеток и их приложения |
Если существует ненулевой вектор m Zn нормы M, удовлетворяющий (7.17), то при некотором k, удовлетворяющем (7.28), один из столбцов Rk даст нам соотношение.
Конец алгоритма.
Замечание 7.32. Лагариас и Хастад показали, что алгоритм 2 делает O(2n2 log M + 20n3) арифметических операций с действительными числами.
§ 7.7. Заключение
В данной главе мы описали некоторые виды приведенных базисов решеток. Основное внимание было уделено LLL-приведенному базису, алгоритму его построения и различным его приложениям. Одно из основных приложений LLL-приведенного базиса будет описано в следующей главе — это алгоритм разложения на неприводимые множители многочленов с рациональными коэффициентами, имеющий полиномиальную сложность от длины входа.
Заметим, что приложения LLL-алгоритма в линейной алгебре, описанные в данной главе, не всегда являются достаточно эффективными. Это видно и на примере алгоритма нахождения целочисленной линейной зависимости действительных чисел из § 7.5, и на примере алгоритма нахождения коротких векторов решеток из того же параграфа.
Нахождение целочисленной линейной зависимости для заданного набора действительных чисел имеет важные приложения в криптографии. В § 7.5 и § 7.6 мы описали два алгоритма для решения этой задачи. Еще один алгоритм можно найти в [129].
Глава 8. Факторизация многочленов над полем рациональных чисел с полиномиальной сложностью
§ 8.1. Введение
В данной главе мы рассматриваем алгоритмы разложения на неприводимые множители многочленов из Z [x]. Центральное место в ней займет описание LLL-алгоритма факторизации многочленов, предложенного А. Ленстрой, Х. Ленстрой и Л. Ловасом в работе [160]. Этот алгоритм имеет полиномиальную сложность от длины входа. Мы также приводим и другие алгоритмы факторизации, эффективные на практике.
Мы будем называть многочлен f(x) Z [x] примитивным, если наибольший общий делитель всех его коэффициентов равен 1.
Разложение на неприводимые множители многочленов в кольце Q [x] сводится к разложению на неприводимые многочлены в коль-
це Z [x] с |
помощью леммы |
Гаусса. Пусть |
мы |
хотим разложить |
f0 (x) Q [x] |
на неприводимые |
множители в |
Q [x]. |
Домножив f0 (x) |
на общий знаменатель коэффициентов и вынося наибольший общий делитель получившихся целочисленных коэффициентов, мы сводим нашу задачу факторизации к задаче факторизации примитивного многочлена f(x) Q [x] на неприводимые многочлены в Q [x].
Лемма Гаусса. Если f(x), g(x), h(x) Z [x], deg g(x) 1, deg h(x) 1, g(x) и h(x) — примитивные, f(x) = g(x) · h(x), то f(x) также прими-
тивен. |
l |
|
m |
n |
Доказательство. Пусть g(x) = |
bixi, h(x) = |
cjxj, f(x) = |
akxk. |
|
Тогда |
=0 |
|
j=0 |
k=0 |
i |
|
|
|
|
ak = |
bicj, |
0 k n. |
|
(8.1) |
i+j=k, 0 i l, 0 j m
Предположим, что f(x) не примитивен. Тогда найдется простое число p, делящее все ak, k = 0, . . . , n. В силу примитивности g(x) найдется номер i0, такой, что p | bi при всех i > i0, p bi0 . Аналогично, найдется

218 Гл. 8. Факторизация многочленов над полем рациональных чисел
номер j0, такой, что p | cj при всех j > j0, p cj0 . Пусть k0 = i0 + j0. Но тогда в силу (8.1) число p не делит
ak0 = bi0 cj0 + |
bicj, |
|
=i +j , |
|
i+j 0 0 |
|
либо i>i0, |
|
либо j>j0 |
поскольку первое слагаемое в правой части этого равенства не делится на p, а второе — делится.
Лемма 8.2. Пусть f(x) Z [x], f(x) примитивен и неприводим в Z [x]. Тогда f(x) неприводим и в Q [x].
Доказательство. Предположим, что f(x) = g(x) · h(x), где g(x), h(x) Q [x], deg g(x) 1, deg h(x) 1. Тогда, вынося общие знаменатели коэффициентов g(x) и h(x) и затем вынося наибольшие общие делители получившихся целочисленных коэффициентов, мы можем представить наше разложение в виде
f(x) = AB g1 (x)h1 (x),
где A Z, B N, (A, B) = 1, g1 (x), h1 (x) Z [x], g1 (x) и h1 (x) — примитивные. Отсюда
Bf(x) = Ag1 (x)h1 (x). |
(8.2) |
Поскольку из этого равенства следует, что B делит все коэффициенты многочлена Ag1 (x)h1 (x), в силу примитивности g1 (x)h1 (x) (лемма Гаусса) и равенства (A, B) = 1 получаем, что B = 1. Но тогда из (8.2) следует, что f(x) приводим в Z [x], что противоречит условию леммы. Итак, мы свели задачу факторизации многочлена f0 Q [x] к задаче факторизации примитивного многочлена f(x) Z [x] на неприводимые
множители в кольце Z [x]. Обозначим через
|
n |
|
f(x) = |
i |
(8.3) |
aˆ ixi, n = deg f(x) 2, |
||
|
=0 |
|
где aˆ i Z, i = 0, . . . , n − 1, aˆ n N, числа aˆ 0, . . . , aˆ n взаимно просты
всовокупности. Эти обозначения и условия мы будем использовать
в§ 8.2— 8.5.
Нормой многочлена h(x) = m hixi Q [x] мы будем называть вели-
|
m |
2 |
=0 |
|
i |
||
|
|
|
|
чину |h| = i=0 hi |
— евклидову длину вектора коэффициентов много- |
члена.
§ 8.2. LLL-алгоритм факторизации: разложение по простому модулю |
219 |
Мы также будем переходить от многочленов из кольца Z [x] к многочленам из кольца Z/lZ [x], где l — какое-либо натуральное
число; для многочлена h(x) = m |
hixi Z [x] мы будем обозначать через |
|||||||
( ) (mod ) многочлен |
m |
i=0 |
|
|
i |
|
|
|
i=0 hi |
(mod |
) |
[ ]. Соответственно, за |
|||||
h x |
l |
|
|
l x |
|
Z/lZ x |
- |
|
пись h(x) (mod l) | g(x) |
(mod |
) означает делимость в |
[ ]. |
|||||
|
l |
|
|
|
|
Z/lZ x |
Также напомним, что кольцо многочленов Z [x] является факториальным (см., например, [27, гл. 9]).
§8.2. LLL-алгоритм факторизации: разложение по простому модулю
Пусть примитивный многочлен f(x) тот же, что в формуле (8.3) из § 8.1. Предположим, что задано простое число p, натуральное число k и многочлен h(x) Z [x], обладающие следующими свойствами:
А) старший коэффициент h(x) равен 1;
Б) h(x) (mod pk) делит f(x) (mod pk) в кольце Z/pkZ [x]; В) h(x) (mod p) неприводим в Z/pZ [x];
Г) (h(x) (mod p))2 f(x) (mod p) в Z/pZ [x].
Лемма 8.3. Существует единственный примитивный неприводимый многочлен h0 (x) Z [x] такой, что h0 (x) делит f(x) в Z [x], h(x) (mod p) | h0 (x) (mod p). При этом для многочленов g(x) Z [x], делящих f(x) в Z [x], эквивалентны следующие условия:
1)h(x) (mod p) | g(x) (mod p);
2)h(x) (mod pk) | g(x) (mod pk);
3)h0 (x) делит g(x) в Z [x].
Доказательство. Из свойства Б) следует, что h(x) (mod p) делит f(x) (mod p) в Z/pZ [x]. Если мы разложим f(x) на неприводимые множители в Z [x] (они также будут примитивными в силу примитивности f(x)), то один из них, взятый по модулю p, делится на h(x) (mod p). В силу свойства Г) такой неприводимый делитель f(x) будет единственен; его и обозначим через h0 (x).
Теперь докажем эквивалентность условий 1)—3). Очевидно, что из третьего условия следует первое, и что из второго условия также следует первое.
Покажем, что из первого условия следует второе.
Пусть h(x) (mod p) | g(x) (mod p). Тогда в силу свойства Г)
h(x) (mod p) |
f(x) |
(mod p). |
||
|
|
|
|
|
|
|
|
|
|