- •Предисловие
- •Тестирование чисел на простоту и построение больших простых чисел
- •Введение
- •Элементарные методы проверки простоты чисел
- •Тесты на простоту для чисел специального вида
- •Алгоритм Миллера
- •Вероятностные тесты на простоту
- •Современные методы проверки простоты чисел
- •Заключение. Детерминированный полиномиальный алгоритм проверки простоты чисел
- •Факторизация целых чисел с экспоненциальной сложностью
- •Введение. Метод Ферма
- •101.21.2(P-1)-метод Полларда
- •Алгоритм Ленстры
- •101.21.2(P+1)-метод Уильямса и его обобщения
- •Методы Шэнкса
- •Прочие методы. Заключение
- •Факторизация целых чисел с субэкспоненциальной сложностью
- •Введение
- •Метод Диксона. Дополнительные стратегии
- •Квадратичное решето
- •Алгоритмы решета числового поля
- •Заключение
- •Алгоритм Ленстры для факторизации целых чисел с помощью эллиптических кривых
- •Вычисление порядка группы точек эллиптической кривой над конечным полем
- •Тестирование чисел на простоту с помощью эллиптических кривых
- •Заключение
- •Алгоритмы дискретного логарифмирования
- •Введение. Детерминированные методы
- •Дискретное логарифмирование в полях Галуа
- •Дискретное логарифмирование и решето числового поля
- •Частное Ферма и дискретное логарифмирование по составному модулю
- •Заключение
- •Факторизация многочленов над конечными полями
- •Введение. Вероятностный алгоритм решения алгебраических уравнений в конечных полях
- •Решение квадратных уравнений
- •Алгоритм Берлекэмпа
- •Некоторые другие усовершенствования алгоритма Берлекэмпа
- •Заключение
- •Приведенные базисы решеток и их приложения
- •Введение. Решетки и базисы
- •LLL-приведенный базис и его свойства
- •Алгоритм построения LLL-приведенного базиса решетки
- •Некоторые приложения LLL-алгоритма
- •Заключение
- •Введение
- •LLL-алгоритм факторизации: разложение по простому модулю
- •LLL-алгоритм факторизации: использование решеток
- •LLL-алгоритм факторизации: подъем разложения
- •LLL-алгоритм факторизации: полное описание
- •Практичный алгоритм факторизации
- •Факторизация многочленов с использованием приближенных вычислений
- •Заключение
- •Введение. Дискретное преобразование Фурье и его свойства
- •Заключение
- •Целочисленная арифметика многократной точности
- •Введение. Сложение и вычитание
- •Умножение
- •Деление
- •Решение систем линейных уравнений над конечными полями
- •Введение
- •Решение систем линейных уравнений в целых числах
- •Гауссово и структурированное гауссово исключение
- •Алгоритм Ланцоша
- •Алгоритм Видемана
- •Другие методы. Заключение
§ 8.4. LLL-алгоритм факторизации: подъем разложения |
225 |
Мы доказали, что |J| = m + 1 − deg h0 (x), J = {1, . . . , m + 1 − deg h0 (x)}, и что t = |J|, т. е. deg h0 (x) = m + 1 − t.
Теперь докажем, что h1 (x) в (8.19) является почти примитивным, т. е. наибольший общий делитель его коэффициентов может быть равен лишь некоторой степени числа p; из этого будет следовать (8.16). Предположим противное, т. е. что найдется простое число q, q = p, такое, что
h1 (x)/q Z [x]. По определению h1 (x) получим, что вектор |
1 |
b1 |
лежит |
||||||||||||||||||||
q |
|||||||||||||||||||||||
где b1i Z, i = 0, . . . , m. Так как b1 |
|
L, то |
|
Zm+1 |
. Тогда b |
|
= qb |
|
|||||||||||||||
в L, так как 1 |
|
J. Пусть |
b |
1 |
= (b |
10 |
, |
. . . , |
b |
|
) |
1i |
, |
||||||||||
|
|
|
|
|
|
|
|
|
|
|
1m |
|
|
|
|
1i |
|
||||||
|
h(x) (mod p ) |
|
|
q i=0 |
b1ix |
|
|
(mod p ) . |
|
|
|
||||||||||||
|
|
|
k |
|
|
|
|
|
i |
|
k |
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
m |
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
что |
|
|
|
|
|
|
|
|
|
|
|
||
Поскольку q = p, то отсюда следует, |
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
m |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
h(x) (mod pk) |
i=0 |
b1ixi |
|
|
(mod pk) |
, |
|
|
|
|
|
|||||||||||
т. е. (b10, . . . , b1m) L. Но это невозможно, |
|
так как b1 является элемен- |
|||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
том базиса решетки L. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
§8.4. LLL-алгоритм факторизации: подъем разложения
В этом параграфе мы покажем, как соотношение u0 (x)v0 (x) ≡ w(x) (mod pm),
где p — простое число, m N, u0 (x), v0 (x), w0 (x) Z [x], может быть преобразовано в соотношение
u2 (x)v2 (x) ≡ w(x) (mod pm1)
для некоторых эффективно вычислимых многочленов u2 (x), v2 (x) Z [x]
инекоторого m1 > m.
Вэтом параграфе штрих не является знаком производной, а служит
для обозначения какого-либо другого многочлена.
Для начала рассмотрим произвольное поле K. Пусть g(x), h(x)K [x], deg g(x) deg h(x) 1, d(x) = НОД(g(x), h(x)).
Алгоритм 1.
На входе алгоритма заданы u(x), v(x) Z [x]. На выходе получается представление u(x)g(x) + v(x)h(x) = d(x).
15 О. Н. Василенко
226 Гл. 8. Факторизация многочленов над полем рациональных чисел
1 шаг. Присвоить (u1, u2, u3) := (1, 0, g(x)), (v1, v2, v3) := (0, 1, h(x)).
2шаг. Если v3 = 0, то выдать значение u(x) = u1, v(x) = u2, d(x) = u3
изакончить работу.
3 шаг. Разделить с остатком:
u3 = qv3 + r, deg r < deg v3.
4 шаг. Присвоить (t1, t2, t3) := (u1, u2, u3) −q(v1, v2, v3), (u1, u2, u3) := := (v1, v2, v3), (v1, v2, v3) := (t1, t2, t3) и вернуться на 2 шаг.
Конец алгоритма.
Легко видеть, что найденные многочлены u(x), v(x), d(x) действительно удовлетворяют равенству u(x)g(x) + v(x)h(x) = d(x) = = НОД(g(x), h(x)). Это проверяется в точности так же, как в обычном алгоритме Евклида для целых чисел (см. Приложение). Можно показать (см. [25, § 4.6.1, упр. 3]), что deg v(x) < deg g(x), deg u(x) < deg h(x).
Теперь рассмотрим поле K = Z/pZ.
Алгоритм 2.
На входе задано простое число p, j N, многочлены a(x), b(x), c(x), gj (x), hj (x) Z/pZ [x], такие, что старший коэффициент hj (x) обратим
в Z/pjZ и a(x)gj (x) + b(x)hj (x) = 1 в Z/pjZ [x]. На выходе получаем многочлены a (x), b (x) Z/pjZ такие, что a (x)gj (x) + b (x)hj (x) = c(x) в Z/pjZ [x], и при этом deg a (x) < deg hj (x).
1 шаг. Ввиду обратимости старшего коэффициента hj (x) можно произвести деление с остатком:
a(x)c(x) = hj (x) · q(x) + r(x), deg r(x) < deg hj (x).
2 шаг. Присвоить
a (x) := r(x), b (x) := b(x)c(x) + gj (x)q(x).
Конец алгоритма.
Корректность работы алгоритма следует из равенств
gj (x)a (x) + hj (x)b (x) =
=gj (x) (a(x)c(x) − hj (x)q(x)) + hj (x) (b(x)c(x) + gj (x)q(x)) =
=c(x) (gj (x)a(x) + hj (x)b(x)) = c(x).
Лемма 8.7. Пусть p — простое число, j N, t(x) Z/p2jZ [x]. Пусть gj (x), hj (x) Z/pjZ [x], t(x) ≡ gj (x)hj (x) (mod pj), старший коэффициент hj (x) обратим в Z/pjZ [x] и существуют многочлены aj (x), bj (x) Z/pjZ [x] такие, что aj (x)gj (x) + bj (x)hj (x) = 1
§ 8.4. LLL-алгоритм факторизации: подъем разложения |
227 |
в Z/pjZ [x]. Тогда можно определить многочлены a2j (x), |
b2j (x), |
g2j (x), h2j (x) Z/p2jZ [x] такие, что |
|
t(x) ≡ g2j (x)h2j (x) (mod p2j), |
|
a2j (x)g2j (x) + b2j (x)h2j (x) = 1 в Z/p2jZ [x], |
|
g2j (x) ≡ gj (mod pj), h2j (x) ≡ hj (x) (mod pj), |
|
deg h2j (x) = deg hj (x). |
|
Доказательство. Определим многочлен cj (x) Z/pjZ [x] при помощи равенства
|
|
|
|
t(x) − gj (x)hj (x) = pjcj (x). |
|
|
|
|
|
|
|
|
|||||
С помощью алгоритма 2 вычислим aj (x), bj (x) такие, что |
|
|
|
|
|
|
|
||||||||||
aj (x)gj (x) + bj (x)hj (x) = cj (x) |
в Z/pjZ [x], |
deg aj (x) < deg hj (x). |
|
||||||||||||||
Положим g |
|
(x) = g (x) + pjb (x), h |
(x) = h (x) + pja (x), g |
|
|
(x), h |
(x) |
|
|||||||||
Z/p |
2j |
2j |
|
j |
j |
2j |
|
j |
|
j |
|
2j |
|
2j |
|
||
jZ [x]. Тогда очевидно, чтоj degh2j (x) = deghj (x) и что g2j (x) ≡ gj (x) |
|||||||||||||||||
(mod p ), h2j (x) ≡ hj (x) (mod p ). Далее, |
|
|
|
|
|
|
|
|
|
|
|||||||
( ) |
( ) |
|
( ) |
( ) |
j ( ( ) |
( ) + |
( ) |
( )) |
(mod |
p |
2j) |
≡ |
|
|
|||
g2j x h2j x |
≡ gj x hj x + p |
aj x gj |
x |
bj x hj x |
|
|
|
|
|
||||||||
|
|
|
|
≡ t(x) − pjcj (x) + pjcj (x) (mod p2j) ≡ t(x) |
(mod p2j). |
||||||||||||
Определим многочлен c1j (x) Z/pjZ [x] равенством
g2j (x)aj (x) + h2j (x)bj (x) = 1 + pjc1j (x) в Z/p2jZ [x].
С помощью алгоритма 2 найдем aj (x), bj (x) такие, что в Z/pjZ [x] выполнено равенство
gj (x)aj (x) + hj (x)bj (x) = c1j (x).
Положим
a2j (x) = aj (x) − pjaj (x) Z/p2jZ [x],
b2j (x) = bj (x) − pjbj (x) Z/p2jZ [x].
Тогда
g2j (x)a2j (x) + h2j (x)b2j (x) = g2j (x)aj (x) + h2j (x)bj (x) − pjc1j (x) = 1
в Z/p2jZ [x]. Лемма доказана.
Замечание 8.8. В лемме описан квадратичный подъем, т. е. переход от соотношений по модулю pj к соотношениям по модулю p2j. Можно
15*
228 Гл. 8. Факторизация многочленов над полем рациональных чисел
описать также линейный подъем, т. е. переход от соотношений по модулю pj к соотношениям по модулю pj+1 (см. [1, гл. 6; 89, гл. 3]). Однако если мы хотим получить из соотношений по модулю p соотношения по модулю pk, где k достаточно велико, то лучше использовать квадратичный подъем, так как он быстрее приведет нас к требуемому результату.
§8.5. LLL-алгоритм факторизации: полное описание
Теперь мы можем детально описать LLL-алгоритм факторизации многочленов в кольце Z [x].
Алгоритм (LLL-факторизация).
На входе алгоритма задан примитивный многочлен f0 (x) Z [x], deg f0 = n0 > 1. На выходе получается разложение f0 (x) на неприводимые множители в Z [x].
1 шаг. Вычисляем g(x) = НОД(f0 (x), f0 (x)) Z [x], где f0 (x) — производная. Полагаем f(x) = fg0((xx)) . Заметим, что, если
f0 (x) = f1 (x) 1 . . . fk (x) k |
(8.20) |
— разложение f0 (x) на неприводимые множители в Z [x], то оно же есть разложение f0 (x) на неприводимые множители в Q [x] (см. лемму 8.2). Поэтому g(x) = f1 (x) 1−1 . . . fk (x) k−1−1 есть примитивный многочлен, и его можно найти с помощью алгоритма Евклида в Q [x]. Тогда f(x) = f1 (x) . . . fk (x) — многочлен, не имеющий кратных неприводимых множителей.
Обозначим n = deg f(x). Далее мы считаем, что n 2 (f(x) неприводим при n = 1 и f0 (x) = f(x) , где = deg f0 (x)).
2шаг. Вычисляем результант Res(f, f ) Z; Res(f, f ) = 0 (так как f
иf взаимно просты). Определение и свойства результанта см. в [9,
гл. 5].
3 шаг. Находим наименьшее простое число p, такое, что p Res(f, f ).
Тогда p не делит старший коэффициент f(x), и f(x) (mod p) Z/pZ [x] не имеет кратных неприводимых делителей. Можно доказать (см. [160]), что p удовлетворяет неравенству
p max 101, ,
поэтому мы быстро найдем его, перебирая все простые числа подряд.
§ 8.5. LLL-алгоритм факторизации: полное описание |
229 |
4 шаг. Раскладываем f(x) (mod p) в Z/pZ [x] на неприводимые унитарные множители с помощью алгоритма Берлекэмпа. Пусть S — список этих множителей. Заводим список S1 неприводимых делителей f(x)
в Z [x], S1 := . Полагаем F(x) = f(x), N = deg f(x). Если |S| = 1, то f(x) |
|||||||||||
неприводим в Z [x] (так как неприводим в Z/pZ [x]). |
|||||||||||
|
5 шаг. Берем какой-либо многочлен hˆ 1 (x) S; пусть deg hˆ 1 (x) = l1 |
||||||||||
(мы ˆ считаем, что |S| 2). Пусть |
|
|
|
ˆ |
ˆ |
|
|||||
F(x) = h1 (x)g1 (x) (mod p). Посколь- |
|||||||||||
ку |
ˆ |
|
|
|
|
|
|
pZ [x], с помощью алгоритма 1 |
|||
h1 (x) и g1 (x) взаимно просты в Z/ˆ |
|||||||||||
из |
§ 8.4 находим представление |
u(x)hˆ |
|
ˆ |
|
||||||
1 (x) + v(x)g1 (x) = 1 в Z/pZ [x], |
|||||||||||
|
ˆ |
|
|
|
|
|
|
|
|
|
|
где deg u(x) < deg g1 (x), deg v(x) < deg h1 (x). Находим минимальное на- |
|||||||||||
туральное число k такое, что |
|
|
|
|
|
|
|
||||
|
p |
kl1 |
N2 |
/2 |
(N + 1) |
N/2 N2 |
2N |
. |
|||
|
|
> 2 |
|
|
|
e |
|F(x)| |
||||
6 шаг. С помощью метода доказательства леммы 8.7 из § 8.4 (применяемого последовательно несколько раз), находим многочлен h1 (x) Z/pkZ [x], такой, что
h1 (x) (mod pk) | F(x) (mod pk),
deg h1 (x) = deg hˆ 1 (x), старший коэффициент h1 (x) обратим по модулю pk. Если в качестве коэффициентов h(x) Z/pkZ [x] рассматривать наименьшие неотрицательные вычеты элементов Z/pkZ, то можно считать, что h(x) Z [x]. Тогда для многочлена h1 (x) выполнены свойства Б), В) и Г) из § 8.2. Домножив h1 (x) Z/pkZ [x] на некоторый элемент a (Z/pkZ) , a ≡ 1 (mod p), можно обеспечить и условие А).
7 шаг. Перебирая последовательно значения |
|
|
|||||||||
m |
= |
|
N − 1 |
, |
N − 1 |
, . . . , |
|
N − 1 |
, N |
− |
1, |
|
2N |
|
2N−1 |
|
2 |
|
|
||||
будем для них выполнять шаг 8, переходя к шагу 9, как только найдем h0 (x) Z [x], h0 (x) | F(x). Если делитель не будет найден для всех m,
то F(x) неприводим в Z [x] |
(это будет следовать из леммы 8.5). |
|||||
|
8 шаг. |
Для |
данного |
m |
рассматриваем множества |
[ ], |
|
m+1 |
|
|
L Z x |
||
{Φ0 (pkxi) | 0 i l − 1} {Φ0 (h1 (x)xi) | 0 i m − l} |
||||||
L |
= Φ0 (L) |
Z |
, определенные в § 8.3. По базису |
|
||
решетки L находим приведенный базис b1, . . . , bm+1. Если выполняется неравенство
|
|
pkl |
1/N |
|
|
|b1| < |
|
|
|
, |
(8.21) |
|F(x)|m |
