- •Предисловие
- •Тестирование чисел на простоту и построение больших простых чисел
- •Введение
- •Элементарные методы проверки простоты чисел
- •Тесты на простоту для чисел специального вида
- •Алгоритм Миллера
- •Вероятностные тесты на простоту
- •Современные методы проверки простоты чисел
- •Заключение. Детерминированный полиномиальный алгоритм проверки простоты чисел
- •Факторизация целых чисел с экспоненциальной сложностью
- •Введение. Метод Ферма
- •101.21.2(P-1)-метод Полларда
- •Алгоритм Ленстры
- •101.21.2(P+1)-метод Уильямса и его обобщения
- •Методы Шэнкса
- •Прочие методы. Заключение
- •Факторизация целых чисел с субэкспоненциальной сложностью
- •Введение
- •Метод Диксона. Дополнительные стратегии
- •Квадратичное решето
- •Алгоритмы решета числового поля
- •Заключение
- •Алгоритм Ленстры для факторизации целых чисел с помощью эллиптических кривых
- •Вычисление порядка группы точек эллиптической кривой над конечным полем
- •Тестирование чисел на простоту с помощью эллиптических кривых
- •Заключение
- •Алгоритмы дискретного логарифмирования
- •Введение. Детерминированные методы
- •Дискретное логарифмирование в полях Галуа
- •Дискретное логарифмирование и решето числового поля
- •Частное Ферма и дискретное логарифмирование по составному модулю
- •Заключение
- •Факторизация многочленов над конечными полями
- •Введение. Вероятностный алгоритм решения алгебраических уравнений в конечных полях
- •Решение квадратных уравнений
- •Алгоритм Берлекэмпа
- •Некоторые другие усовершенствования алгоритма Берлекэмпа
- •Заключение
- •Приведенные базисы решеток и их приложения
- •Введение. Решетки и базисы
- •LLL-приведенный базис и его свойства
- •Алгоритм построения LLL-приведенного базиса решетки
- •Некоторые приложения LLL-алгоритма
- •Заключение
- •Введение
- •LLL-алгоритм факторизации: разложение по простому модулю
- •LLL-алгоритм факторизации: использование решеток
- •LLL-алгоритм факторизации: подъем разложения
- •LLL-алгоритм факторизации: полное описание
- •Практичный алгоритм факторизации
- •Факторизация многочленов с использованием приближенных вычислений
- •Заключение
- •Введение. Дискретное преобразование Фурье и его свойства
- •Заключение
- •Целочисленная арифметика многократной точности
- •Введение. Сложение и вычитание
- •Умножение
- •Деление
- •Решение систем линейных уравнений над конечными полями
- •Введение
- •Решение систем линейных уравнений в целых числах
- •Гауссово и структурированное гауссово исключение
- •Алгоритм Ланцоша
- •Алгоритм Видемана
- •Другие методы. Заключение
190 Гл. 7. Приведенные базисы решеток и их приложения
для которого |
r |
i |
= 0, то |
очевидно, |
что |
r = r |
i0 |
. Поэтому |
(учитывая |
||||||||||
|
|
|
|
|
|
|
|
|
|
i0 |
|
|
|
|
|
||||
ортогональность bi ) получим неравенства |
|
|
|
|
|
|
|
||||||||||||
|
n |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
i |
( |
)2 |
|
2 |
2 |
|
2 |
2 |
1 |
|
|
2 |
|
1 |
2 |
, |
||
|x| |
= |
ri |
|
|bi | |
ri0 |
|bi0 | |
|
|bi0 | |
|
|
|b1| |
|
|
|b1| |
|
||||
|
2i0−1 |
2n−1 |
|
||||||||||||||||
|
=1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
откуда следует утверждение теоремы.
Теорема 7.10. Пусть b1, . . . , bn — LLL-приведенный базис решетки Λ, x1, . . . , xt — линейно независимые векторы решетки Λ. Тогда при всех j t выполнены неравенства
|bj|2 2n−1 max(|x1|2, . . . , |xt|2).
Доказательство. Разложим xi по базису:
|
n |
|
xi = |
j |
. . . , t. |
rijbj, rij Z, i = 1, |
||
|
=1 |
|
Обозначим для каждого i, 1 i t, через j(i) наибольший номер j такой, что rij = 0. Тогда, аналогично доказательству теоремы 7.8, выполнены неравенства
|
|xi|2 |bj(i) |2, i = 1, . . . , t. |
считать, что j(1) |
|
Не ограничивая |
общности рассуждений, |
можно |
|
j(2) . . . j(t) |
. Тогда j(i) i, i = 1, . . . |
, t, так |
как если найдется |
номер i такой, что j(i) < i, то x1, . . . , xi Lоб (b1, . . . , bj(i)), что противоречит линейной независимости x1, . . . , xi. По теореме 7.7 имеем
|bi|2 2j(i)−1|bj(i) |2 2n−1|xi|2;
последнее неравенство следует из определения j(i).
§7.3. Алгоритм построения LLL-приведенного базиса решетки
Вэтом параграфе мы опишем построение LLL-приведенного базиса решетки Λ Rn. Мы сохраняем обозначения § 7.2.
Алгоритм построения LLL-приведенного базиса.
Вначале работы алгоритма задан b1, . . . , bn — какой-то базис решетки Λ. В конце работы b1, . . . , bn — LLL-приведенный базис.
Проводится индукция по k {1, 2, . . . , n + 1}. В начале k = 2; когда k = n + 1, алгоритм заканчивает работу и выдает LLL-приведенный базис.
§ 7.3. Алгоритм построения LLL-приведенного базиса решетки |
191 |
Для каждого k символом ( )k мы будем обозначать совокупность
неравенств |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ij| |
1 |
, |
|
|
|
|
|
|
|
|
|
|
1 j i < k, |
|
2 |
|
|
2 |
|
3 |
|
|
|
2 |
|
( )k |
|||
bi + ii 1bi 1 |
| |
|
|
|
| |
bi 1 |
| |
|
, |
1 < i < k. |
|
|||
|
4 |
|
||||||||||||
| |
|
− |
− |
|
|
|
− |
|
|
|
|
|||
Если k = 2, то условия ( )2 выполнены, поскольку для i получится пустое множество значений 1 < i < 2. Если k = n + 1, то ( )n+1 означает, что базис приведенный (по определению).
Предположим, что для некоторого k, 1 < k < n + 1, выполнены неравенства ( )k. Мы хотим обеспечить выполнение ( )k+1. Для начала обеспечим выполнение неравенства
| k,k−1| |
1 |
. |
(7.4) |
2 |
Если (7.4) уже выполнено, то двигаемся дальше. В противном случае находим r — ближайшее целое к k,k−1, и заменяем bk на
|
k−2 |
|
|
|
|
|
|
|
|
|
|||
bk − rbk−1 = bk + |
( kj − r |
|
k−1,j)bj |
+ ( k,k−1 |
− r)bk−1. |
|
|
=1 |
|
|
|
|
|
|
j |
|
|
|
|
|
Тогда коэффициент k,k−1 заменится |
на |
k,k−1 − r, что обеспечит |
||||
выполнение (7.4). Коэффициенты |
|
k,j |
заменятся |
на kj − r k−1,j, |
||
j = 1, . . . , k − 2. Все остальные коэффициенты ij и векторы bi при i < k и при i > k, а также вектор bk не изменятся. Действительно, bi есть
проекция bi на Lоб (b1, . . . , bi−1) ; при замене bk на bk − rbk−1 данные линейные оболочки не изменяются, значит, не изменяются и все bi . Далее, поскольку ij = (bi, bj )/(bj , bi ), то, при i = k, ij не меняются в силу того, что bi не изменился и все bj также не изменились.
Продолжим обеспечение условий ( )k+1 в предположении, что (7.4) выполнено.
1 случай. Пусть k 2 и выполнено неравенство
|
+ |
|
|
2 |
|
3 |
|
2 |
|
|bk |
|
k,k−1bk−1 |
| |
< |
|
|bk−1 |
| . |
(7.5) |
|
|
4 |
Тогда мы меняем местами вектора bk и bk−1. При этом изменят- |
|||||||||||||||||
ся векторы b |
и b и коэффициенты |
|
k,k−1 |
, |
|
k−1,j |
, |
k,j |
, |
i,k−1 |
, |
|
i,k |
, |
|||
k−1 |
k |
|
|
|
|
|
|
|
|
|
|||||||
где j < k − 1 или i > k. Остальные bi, bi |
и ij не изменятся по тем же |
||||||||||||||||
причинам, что и ранее, т. е. потому, что L |
|
(b |
, . . . , b ) при i = k, k |
− |
1 |
||||||||||||
|
об |
|
1 |
|
|
|
i |
|
|
|
|
|
|
||||
остается той же самой, и векторы bi при i = k, k − 1 не изменятся. |
|
|
|
||||||||||||||
192 Гл. 7. Приведенные базисы решеток и их приложения
Что произошло при замене местами |
bk |
и |
bk−1? |
Вектор |
bk + |
|||||||||
+ |
k,k−1 |
b |
ранее был равен проекции |
b |
k |
на |
L (b , . . . , b |
) , |
||||||
|
k−1 |
|
|
|
|
|
|
об |
|
1 |
k−2 |
|||
а теперь он равен проекции нового вектора bk−1 на Lоб (b1 |
, . . . , bk−2) . |
|||||||||||||
Далее, b |
был равен проекции b |
k−1 |
на L |
об |
(b |
, . . . , b |
|
|
) , а теперь |
|||||
|
|
k−1 |
|
|
|
1 |
|
|
k−2 |
|
||||
это есть проекция нового вектора bk на Lоб (b1, . . . , bi) . Из неравен-
ства (7.5) следует, что при нашей замене значение |b − |2 уменьшилось
k 1
более чем в 3/4 раза.
Сделав эту замену местами bk и bk−1
зываемся в условиях ( )k−1.
2 случай. Пусть либо k = 1, либо
|
+ |
|
|
| |
3 |
|
2 |
|
|bk |
|
k,k−1bk−1 |
4 |
|bk−1 |
| . |
(7.6) |
Если k = 1, то присваиваем k значение 2 и продолжаем процесс, т. е. обеспечиваем выполнение ( )2.
Если выполнено условие (7.6) и k > 1, то обеспечиваем выполнение
неравенств |
|
| kj| 21 , 1 j < k − 1 |
(7.7) |
(для j = k − 1 (7.7) уже выполнено в силу (7.4)). Пусть l — наибольший номер, для которого | kl| > 12 . Тогда l k − 2. Возьмем r — ближай-
шее целое к kl — и заменим bk на bk − rbl. При этом kj заменятся на kl − r. Все остальные ij и все векторы bi останутся при этом неизменными. Мы продолжаем этот процесс, уменьшая l, пока не достигнем значения l = 1. В этом случае мы обеспечим выполнение условий ( )k+1.
Если мы достигли выполнения условий ( )n+1, то алгоритм останавливается, поскольку b1, . . . , bn образуют приведенный базис; в противном случае мы продолжаем процесс, т. е. увеличиваем значение k.
Конец алгоритма.
Докажем, что алгоритм заканчивает работу. Обозначим через
di = det (bj, bl) 1 j,l i, i = 1, . . . , n.
Очевидно, что
di = det (bj · bl T) = (det bj 1 j i)2 =
= (det bj 1 j i)2 = det( bj · bl T) = i |bj |2.
j=1
|
§ 7.3. Алгоритм построения LLL-приведенного базиса решетки |
|
193 |
|
Поскольку 2 случай срабатывает за конечное число |
операций |
|
и |
увеличивает значение k на единицу, то нам нужно доказать, |
что |
|
1 |
случай встретится лишь конечное число раз. Заметим, |
что |
при |
прохождении 1 случая при некотором значении k величина dk−1 уменьшается более чем в 3/4 раза, поскольку так уменьшается значе-
ние |b − |2.
k 1
Однако величины di ограничены снизу некоторой положительной постоянной, зависящей только от решетки Λ. Точнее, если обозначить через m(Λ) квадрат длины кратчайшего ненулевого вектора Λ, то выполнены неравенства
4 (i−1)/2
m(Λ) 3 d1i /i, i = 1, . . . , n
(см. [24, гл. 2]). Поэтому для каждого значения k 1 случай может встретиться лишь конечное число раз. Это означает, что алгоритм закончит работу.
Теорема 7.11 (см. [160]). Если Λ — решетка в Zn с базисом b1, . . . , bn, причем
|bi| B, i = 1, . . . , n,
где B R, B 2, то алгоритм построения LLL-приведенного базиса делает O(n4 log B) арифметических операций. При этом целые числа, встречающиеся в ходе работы алгоритма, имеют двоичную длину O(n log B) битов.
Замечание 7.12. В книге [89, гл. 2] приведена блок-схема алгоритма построения LLL-приведенного базиса, удобная для практической реализации.
Замечание 7.13. В работе [149] рассмотрена возможность изменения значения постоянной c = 3/4 в условии Ловаса
|bi + i,i−1bi−1|2 34 |bi−1|2.
При этом значение c меняется в ходе работы алгоритма приведения от 14 + до 0,99.
Замечание 7.14. Многочисленные усовершенствования алгоритма построения LLL-приведенного базиса содержатся в работе [239]. В следующем параграфе мы опишем некоторые из них.
13 О. Н. Василенко
194Гл. 7. Приведенные базисы решеток и их приложения
§7.4. Алгоритм Шнорра—Ойхнера
ицелочисленный LLL-алгоритм
Вэтом параграфе мы вкратце изложим некоторые модификации алгоритма построения LLL-приведенного базиса. Эти модификации описаны в работах [239; 102; 240; 216] и в книге [89].
Мы будем обозначать через Bi следующие величины:
Bi = (b |
, b ), i = 1, . . . , n. |
i |
i |
Одна из модификаций LLL-алгоритма была предложена Шнорром и Ойхнером. Она называется LLL-алгоритмом с глубокой вставкой. Для этой модификации теоретическая оценка сложности хуже, чем для исходного LLL-алгоритма, однако на практике с ее помощью зачастую можно получать более короткие вектора решетки, что немаловажно для практических приложений.
Идея LLL-алгоритма с глубокой вставкой заключается в следу-
ющем. Пусть k > i; вставим вектор bk между bi−1 |
и bi |
в процессе |
||||||||||||||
построения приведенного базиса. Поскольку |
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
k−1 |
|
|
|
i−1 |
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
j |
|
|
|
|
|
|
||
|
|
|
bk = bk + |
kjbj = bk + v + |
kjbj , |
|
|
|
|
|||||||
j |
|
|
|
j=1 |
|
|
|
=1 |
|
|
|
|
|
|
||
|
|
b , то после вставки b |
|
между b |
и b |
|
новое значение |
|||||||||
где v = k−1 |
|
kj |
k |
|
||||||||||||
=i |
|
j |
|
|
|
|
i |
|
i−1 |
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
вектора bi будет равно bi,new: |
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
k−1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
j |
|
|
|
|
|
|
|
||
|
|
|
bi,new = bk + v = bk |
+ |
|
kjbj . |
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
=i |
|
|
|
|
|
|
|
|
Новое значение квадрата длины вектора bi равно Bi,new: |
|
|
|
|||||||||||||
|
|
|
k−1 |
|
k−1 |
|
|
|
|
|
k−1 |
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
Bi,new = bk + j=i |
kjbj , bk + j=i |
kjbj |
4 |
= Bk + j=i |
kj2 Bj. |
|||||||||||
|
|
|
|
|
|
|
|
i |
k − |
|
|
|
|
|||
Если новое значение Bi,new меньше старого |
например, Bi,new |
3 |
Bi , |
|||||||||||||
4 |
||||||||||||||||
то такая замена местами |
уместна; если = |
|
1, |
то такая замена |
||||||||||||
равносильна одному из шагов LLL-алгоритма. Однако если i = k − 1, то приходится перевычислять больше значений коэффициентов ij, чем в исходном LLL-алгоритме; это увеличивает время работы алгоритма
§ 7.4. Алгоритм Шнорра—Ойхнера и целочисленный LLL-алгоритм |
195 |
Шнорра—Ойхнера. Блок-схему LLL-алгоритма с глубокой вставкой можно найти в [89, гл. 2, алгоритм 2.6.4].
Другая модификация LLL-алгоритма называется целочисленным LLL-алгоритмом. Она была предложена Де Вегером. Эта модификация применима в случае, когда матрица Грама G = (bi, bj) i,j=1,...,n базиса b1, . . . , bn решетки Λ является целочисленной (это имеет место, например, в случае, когда сама решетка Λ содержится в Zn). Тогда справедлива следующая теорема, описывающая некоторые арифмети-
ческие свойства решетки. |
|
|
d0 = 1, di = |
Теорема 7.15. Пусть (как |
и |
в § 7.3) |
|
= det (bj, bl) j,l=1,...,i, i = 1, . . . , n. |
Если |
матрица |
Грама решет- |
ки Λ является целочисленной, то для всех номеров i, 1 i n, и всех j < i выполнены следующие утверждения:
1. di−1Bi Z, di ij Z; |
|
ik mkBk Z. |
|
|
2. для всех m, j < m i, di · |
|
|||
|
1 k j |
|
|
|
Доказательство. В § 7.3 мы видели, что |
|
|||
|
i |
i |
|
|
|
j |
|
|
|
di = |
|bj |2 |
= |
Bj. |
|
|
=1 |
j=1 |
|
|
Поэтому di = di−1Bi Z. Пусть j < i. Рассмотрим вектор |
|
|||
j |
|
|
i−1 |
|
|
|
|
|
|
|
|
|
|
|
v = bi − |
ikbk = bi + |
ikbk. |
(7.8) |
|
k=1 |
|
|
k=j+1 |
|
Очевидно, что (v, bk) = 0 при k = 1, . . . , j. Поскольку Lоб (b1, . . . , bk) = |
|||
= Lоб (b |
, . . . , b ), то |
|
|
1 |
k |
|
|
|
(v, bk) = 0, |
k = 1, . . . , j |
(7.9) |
и |
|
|
|
|
|
j |
|
|
v = bi − |
|
|
|
xkbk |
(7.10) |
|
k=1
при некоторых x1, . . . , xk R. Из (7.8) и (7.9) получаем систему линейных уравнений
(bi, b1) (b1, b1) . . . (b1, bj) x1
. . . = . . . . . . . . . . . . . . . . . . . . . . . . . .
(bi, bj) |
(bj, b1) . . . (bj, bj) |
xj |
13*
196 |
Гл. 7. Приведенные базисы решеток и их приложения |
Решая эту систему по правилу |
Крамера, |
k = 1, . . . , j, где mk Z. Поскольку |
|
j |
j |
xkbk = |
ikbk, |
получим, что xk = mk , dj
k=1 k=1
то xj = ij, откуда следует первое утверждение теоремы.
Докажем второе утверждение. Для вектора v, определенного в формуле (7.8), справедливо равенство
j
djv = djbi − djxkbk,
k=1
причем по доказанному выше dixk Z. Это означает, что djv Λ, откуда (djv, bm) Z для всех m = 1, . . . , n. Тогда
|
dj bi |
− k=1 ikbk, bm Z, |
m = 1, . . . , n. |
|||
|
|
|
j |
|
|
|
Поэтому |
|
|
|
|
|
|
dj |
k=1 ikbk |
, bm Z, |
m = 1, . . . , n. |
|||
|
|
|
j |
|
|
|
|
|
|
|
|
|
|
Пусть j < m i. Тогда bm = bm + m−1 |
mlbl и |
|||||
|
|
|
|
l |
|
|
dj k=1 ikbk |
|
|
|
=1 |
+ l=1 mlbl = |
|
, bm |
= dj k=1 ikbk, bm |
|||||
j |
|
|
j |
|
m−1 |
|
|
|
|
|
|
|
|
j
= dj · ik mkBk Z, k=1
что и требовалось доказать.
Следствие 7.16. В условиях теоремы положим дополнительно
ij = dj ij Z при i < j, ii = di.
При фиксированных i, j, таких, что j i, рассмотрим последовательность
u0 = (bi, bj), uk = |
dkuk−1 − ik jk |
, k = 1, . . . , j − 1. |
dk−1 |
||
Тогда uk Z, uj−1 = ij. |
|
|
§ 7.4. Алгоритм Шнорра—Ойхнера и целочисленный LLL-алгоритм |
197 |
Доказательство. Покажем, что
|
|
|
|
|
|
|
|
|
k |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
il jl |
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
uk = dk (bi, bj) − l=1 |
|
dldl−1 |
. |
|
|
|
|
|
(7.11) |
||||||||
При k = 0 это очевидно. Пусть для m < k формула |
(7.11) |
верна. |
|||||||||||||||||||
Тогда |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
k−1 |
|
|
|
|
|
|
|
|
|
|
|
dkuk−1 |
|
dk |
|
ik jk |
|
|
|
|
|
|
|
il jl |
|
|
1 |
|
|
|
|
|
uk = |
dk−1 |
− |
dk−1 |
· |
dk |
= dk (bi, bj) − l=1 |
dldl−1 |
− |
dkdk−1 |
|
ik |
|
jk , |
||||||||
что доказывает (7.11) для k. Из (7.11) следует, что |
|
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
k |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
uk = dk (bi, bj) − l=1 |
il jlBl , |
|
|
|
|
|
(7.12) |
||||||||||
поскольку |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
il jl |
|
dl |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
= |
|
il jl = Bl il jl. |
|
|
|
|
|
|
|
||||||
|
|
|
|
|
dldl−1 |
dl−1 |
|
|
|
|
|
|
|
||||||||
Из теоремы и (7.12) следует, что uk Z. Равенство uj−1 = ij также следует из (7.12), поскольку
uj−1 |
= dj−1 (bi, bj) − l=1 |
il jlBl = |
||
|
|
|
j−1 |
|
|
|
|
|
|
|
= dj−1 |
bi + t=1 |
itbt , bj + s=1 jsbs |
|
|
|
|
i−1 |
j−1 |
|
|
|
|
|
|
= dj−1 |
ijBj + s=1 is jsBs − l=1 il jlBl |
||
|
|
|
j−1 |
j−1 |
|
|
|
|
|
j−1
−il jlBl =
l=1
= dj−1 ij Bj = dj ij = ij.
Следствие доказано.
Целочисленный LLL-алгоритм устроен следующим образом. Он работает не с векторами b1, . . . , bn, а с целочисленной матрицей Грама G. Выход алгоритма — целочисленная матрица H, выражающая координаты LLL-приведенного базиса через координаты исходного базиса решетки Λ. При этом с помощью теоремы и следствия из нее все вычисления проводятся только с целыми числами. Блок-схему алгоритма можно найти в [89, гл. 2, алгоритм 2.6.7].
Последней модификацией LLL-алгоритма, о которой мы упомянем в данном параграфе, является MLLL-алгоритм Поста. Этот
