Гамова А.Н. Методические указания к самостоятельной работе

advertisement
Методические указания к самостоятельной работе студентов
к спецкурсу “Теоретико-числовые методы в криптографии”
Гамова А.Н.
I. Элементарная теория чисел.
1. Основные понятия [2]: 2.1
1) Отношение сравнимости и его свойства; полная система вычетов по mod m,
система наименьших неотрицательных вычетов; функция Эйлера.
2) Теорема Эйлера: m>1, натуральное, a-целое, (a,m) =1, то a(m)1 (mod m).
3) Теорема Ферма: ap-11 (mod p), где p- простое и p не делит a.
2. Сравнения 1-й степени 2.2
ax  b(mod m)
(2.2)
1) Теорема. Сравнение ax  b(mod m) имеет решение, если b делит d = (a.m).
2) Теорема. Если (2.2) разрешимо, x0 его решение, то x0, x0+m1, …, x0+(d-1)m1
все решения (2.2), где m1=m/d.
Самостоятельная работа: [2]: 2, упр.4.
3. Китайская теорема об остатках: Система сравнений
x  a1(mod m1), x  a2(mod m2),…, x  ar(mod mr),
(3.2)
где m1, m2,… ,mr –попарно взаимно просты, имеет решение
x0 =  ai Mi Ni (mod m1m2 … mr), где Mi = m1m2 … mi-1mi+1 …mr, Ni=Mi-1 (mod mi)
Самостоятельная работа: [2]: 2, упр.6.
4. Теорема: Сравнение n-й степени по mod p не может иметь более n корней.
5. Сравнения 2-й степени:
x2  a (mod m),
(5.1)
где m>1, (a,m) = 1.
Если сравнение разрешимо, a называется квадратичным вычетом по mod m,
В противном случае – квадратичным невычетом по mod m.
1) Символы Лежандра и Якоби; их свойства: 2.3.1
2) Методы решения сравнений (5.1) для m = p, где p не делит a.
Если символ Лежандра ( a / p) =1, то сравнение (5.1) разрешимо и имеет точно два
решения.
а) Пусть p = 3 (mod 4), то есть p = 4m + 3, то 1= (a / p) = a p-1 /2 = a 2m+1 (mod p), откуда
x1 = am+1 (mod p),
x2 = - am+1 (mod p).
б) Пусть p = 5 (mod 8), то есть p = 8m + 5, то 1= (a / p) = a p-1 /2 = a 4m+2 (mod p), откуда
a 2m+1 =1 (mod p) или a 2m+1 = -1 (mod p). В первом случае имеем решение
x1 = am+1 (mod p) и x2 = - am+1 (mod p). Во втором случае, заметим, что число 2
является квадратичным невычетом при p = 5 (mod 8), тогда по свойству 3 символа
Лежандра ( 2 / p) = 2 p -1 / 2 = 2 4m + 2 = -1 (mod p). Тогда a 2m+1 2 4m + 2 = 1 (mod p).
Получаем решения x1 = a m+1 2 2m + 1 (mod p) и x2 = - a m+1 2 2m + 1 (mod p).
Самостоятельная работа: [2]: 2 упр.7, 8,13, 14.
3) Случаи составного модуля: 2.3.3
a) Теорема: p  2, простое, p не делит a, n  1. Сравнение
x2  a (mod pn)
(3.1)
разрешимо тогда и только тогда, когда
x2  a (mod p),
(3.2)
разрешимо.
b) Порядком числа a, 1  a < m, (a, m) = 1, по mod m называется наименьшее
натуральное число d, для которого a d  1 (mod m). Если порядок d = (m), число a
называется первообразным корнем по mod m.
c) Теорема: Для любого простого p  2 существует первообразный корень по
mod p2.
d) Теорема: Если сравнение (3.1) разрешимо, то оно имеет ровно два решения.
e) Теорема: Пусть число a нечетное, то
1. Сравнение x2  a (mod 2) разрешимо при любом a.
2. Сравнение x2  a (mod 22 ) разрешимо тогда и только тогда, когда a  1 (mod 4).
3. Сравнение x2  a (mod 2n ), где n  3. разрешимо тогда и только тогда, когда
a  1 (mod 8).
ж) Теорема: Пусть m = m1 m2…mr, где числа m1, m2,…,mr попарно взаимно просты.
Сравнение (5.1) разрешимо тогда и только тогда, когда разрешимы все сравнения
x2  a(mod m1), x2  a(mod m2),…, x2  a(mod mr).
Следствие 1. Пусть (m, a) = 1, cравнение x2  a(mod m) разрешимо тогда и только
тогда, когда a = 1 (mod 4) при n = 2; a = 1 (mod 8) при n  3 и
(a / p1) =(a / p2) =…=(a / ps) =1, где 2, p1, p2…,ps - простые числа из канонического
разложения m.
Cравнение имеет 2s решений при n = 0 или n = 1;
2s+1 решений при n = 2;
2s+2 решения при n  3.
Следствие 2. Если число m имеет хотя бы два взаимно простых делителя, то число
квадратичных вычетов по mod m строго меньше, чем число квадратичных невычетов.
Самостоятельная работа: [2]: 2, упр.15, 16.
II. Сложность основных целочисленных алгоритмов в кольце целых чисел,
кольцах вычетов и конечных полях по книге А.В.Черемушкина “Лекции по
арифметическим алгоритмам в криптографии”, Глава 1, §1 - §7.
1. Оценки функции сложности
При оценке сложности применяются методы редукции и сведения к другим задачам с
известными оценками сложности. Для функции сложности получаются неравенства вида
f (n)  c f (n / a) + b g (n) + dn,
(1.1)
где a, b, c, d – некоторые положительные константы.
Свойства функции сложности:
a) f (n)  n;
b) k f (n)  f (kn), k >1.
Лемма 1. Если функции f (n) и g (n) удовлетворяют свойствам a), b) и при a>1, b>0,
c>0 выполняется неравенство (1.1), то f (n) = O (g (n)).
Лемма 2. Если при некоторых константах a>0, c>0, d>0
f (1) = d, f (n) = c f (n / a) + dn, то при n>1
f (n) = O(n), при a>c; f (n) = O(n log n) при a=c; f (n) = O(nlog a c), при a<c.
Пример использования леммы 2 – умножение методом Карацубы:
A, B – два n –разрядных числа. Разобьем их на два слоагаемых A = 2kA1 + A0,
B = 2kB1 + B0. Тогда AB = (2 2k + 2k) A1B1 + 2k (Ao – A1) (Bo – B1) + (2k +1)AoB0.
Таким образом, для вrычисления произведения двух n-разрядных чисел надо выполнить три
умножения n / 2 – разрядных чисел и некоторое количество сложений, вычитаний и
сдвигов. Имеем оценку f (n) = 3 f (n / 2) + сn, с>0. По лемме 2: сложность умножения
М(n) < f (n) = O (nlog 23).
Самостоятельная работа: Предлагается вычислить сложность арифметических операций
с целыми числами.
2. Сложность алгоритма Евклида
Пусть A>B>0. Обзначим A = r-1, B = r0, r i-2 = d i ri-1 +ri при i = 1,…,k и rk-1 = d k+1.
Тогда (A, B) = rk и до получения остатка rk+1 = 0 необходимо выполнить k+1 делений.
Оценим число делений в алгоритме Евклида. Рассмотрим последовательность чисел
Фибоначчи f0, f1,…,fk,…, где f0 = 0, f1 = 1, fk = fk-1 + fk-2, k2.
Лемма. При k>1 fkRk-2, где R = (1+5) /2.
Теорема (Ламе): Для любого N, где 0<B<AN, число делений в алгоритме Евклида
не превосходит 1+log R N.
Непосредственно из этой теоремы получаем оценку сложности алгоритма Евклида
для нахождения (A,B) двух n-разрядных чисел:
O(M(n) (k+1)) = O (M(n) log n)  O(n2 log n).
Самостоятельная работа: 1) Найти оценки сложности для расширенного и бинарного
алгоритма Евклида. 2)Изучить связь алгоритма Евклида с непрерывными дробями [1],§4.
3. Сложность операций в кольце вычетов
Элементы кольца вычетов ZN отождествляем с числами в интервале 0A<N. Длина запи
си числа N n = log N. Сложность сложения и вычитания O(n).
Нахождение вычета произведения состоит из одного умножения двух n-разрядных чисел
и одного деления 2n-разрядного числа на n-разрядное, сложность равна O(M(n)).
Метод Монтгомери: A =  2i ai и B  AB = a0B + 2(a1B + …2(an-2B + 2an-1B)…).
Выполняется за n шагов, на каждом шаге к текущему значению R прибавляется aiB с
последующим делением на 2, благодаря чему полученные значения находятся в
интервале 0R<N. К полученному в результате работы числу 2-n AB modN и 22n modN
снова применим алгоритм Монтгомери. Поскольку 22n modN вычисляется с помощью
сдвигов и вычитаний сложностью O(n2), как и сам алгоритм, сложность вычисления
O(n2) двоичных операций.
Самостоятельная работа: Методом Монтгомери найти произведение [2]:2, упр.7.
4. Использование модульной арифметики
Алгоритм Шенхаге: Если M = m1m2 … mk, где m1, m2, …,mk взаимно простые числа
(по b разрядов), 0u< M и ui  u mod mi , i = 1,…,k. По числу u вычисляется набор
(u1 ,…,uk). Для чего выполняется k делений kb-разрядного числа u на числа mi , i =
1,…,k, затрачивая O( k M(b)) битовых операций. Общая сложность алгоритма
O( k2 M(b)).
Оценку можно улучшить, если применить технику “разделяй и властвуй”.
Самостоятельная работа: Используя технику “разделяй и властвуй” при k = 2s,
выполнить вычисления u(u1 ,…,uk) и, применяя китайскую теорему об остатках,
реализовать обратный переход (u1 ,…,uk) u. Вычислить сложностную функция. [1], §5.
5. Вычисления с многочленами
Самостоятельная работа: [1], §6.
6. Дискретное преобразование Фурье для кольца целых чисел
Пусть R – коммутативное кольцо с единицей. Элемент  кольца R называется
примитивным корнем n-ой степени из единицы, если:
1.   1;
2. n = 1;
3.   i j = 0, 1 i n.
Если, кроме того, элемент n обратим в кольце R, то задано дискретное преобразование
Фурье, ставящее в соответствие каждому вектору a = (a0 ,…,an-1), aiR, i = 1,…, n-1,
вектор F(a) = b = (b0 ,…,bn-1), где bi =  aj  i j, 0  i  n-1.
Обратное дискретное преобразование Фурье определяется как
F-1(b) = c, где
-1
-ij
координаты вектора c равны bi = n  bj  , 0  i  n-1.
Кроме того, F(a) есть значение многочлена с коэффициентами a0 ,…,an-1 в точках i,
i = 0,…,n-1, а обратное преобразование Фурье – интерполяции многочлена по его
значениям в этих точках. То, что эти точки образуют циклическую мультипликативную
подгруппу в R, позволяет построить быстрый алгоритм вычислений значения как
прямого, так и обратного дискретного преобразования Фурье.
Ввиду того, что преобразование Фурье широко применяется, покажем эффективные
методы его реализации.
Пусть n = 2k. Значение многочлена f(x) в точке x =  i совпадает с остатком от деления
f(x) на x-  i , 0  i  n-1. Так как двучлены x- i , 0  i  n-1 попарно взаимно просты и
их произведение равно xn – 1, то применим использованный в пункте 4 метод
“разделяй и властвуй”: xn – 1 = (xn / 2 – 1)( xn / 2 –n / 2). Далее (xn / 2 – 1) =
(xn / 4 – 1)( xn / 4 –n / 4), ( xn / 2 –n / 2) = ( xn / 4 –n / 4) ( xn / 4 – 3n / 4) и т.д., до получения
линейных сомножителей ( x – i ). Заметим, что n / 2 = -1, n / 4 = –n / 2n / 4 = -  3n / 4.
Лемма. Пусть f(x) =  aj x i. Тогда остаток от делении f(x) на (xn / 2 – с), где cR, равен
r(x) =  ( aj + cac+n/2) x i
i=0…n/2-1
Из леммы следует алгоритм вычисления коэффициентов r(x): Разделить коэффициенты
f(x) пополам, затем умножить на c коэффициенты второй половины и сложить их с
коэффициентами первой половины, что требует не более n арифметических операций
кольца R. Выполнение всего алгоритма происходит не более, чем за n+2n/2+4n/4+…
+2kn/2k арифметических операций кольца, т.е. сложность алгоритма Фурье O(n log n).
Пример быстрого применения преобразования Фурье в кольце целых чисел:
Если коэффициенты f(x) ограничены некоторым числом M, выбираем n = 2k, тогда
примитивный корень  в кольце ZM есть также некоторая степень 2. Это позволяет
эффективно
реализовать быстрое преобразование Фурье, используя двоичное
представление чисел.
Теорема. Если n = 2k и  = 2g  1, то при M = n / 2 + 1 элемент n является обратимым в
кольце ZM, а элемент  - примитивным корнем из 1 степени n.
Самостоятельная работа: Вычислить быстрое преобразование Фурье вектора
a = (0,1,2,3,4,5,6,7) в кольце Z / 65537Z при n = 23, k = 3,  = 16 – примитивный корень
степени 8 из 1 по mod 65537.
7. Арифметические алгоритмы (выполняются в виде лабораторных работ)
При выполнении работы «Проверка чисел на простоту» студенты должны написать
программы, реализующие тесты Ферма, Соловэя — Штрассена и Миллера — Рабина
убедиться в работоспособности алгоритмов (учитывая вероятностный характер
тестирования), исследовать алгоритмы с точки зрения количества ошибок, допускаемых
ими в зависимости от вида тестируемого числа (распознавание чисел Кармайкла) и от
количества прогонов теста, обработать полученные статистические данные, а также
измерить и сравнить время работы программ. [2], глава 5. Образцы выполнения
лабораторных работ в Приложении 1.
В работу «Разложение чисел на множители» включены вероятностные методы
разложения. Эти методы сравниваются по двум направлениям: специальные (методы
Полларда), эффективность которых существенно зависит от вида составного числа, и
универсальные(метод непрерывных дробей и метод квадратичного решета).[2], глава 6.
Образцы выполнения лабораторных работ в Приложении 1.
В следующей лабораторной работе реализуются методы вычисления дискретного
логарифма. [2], глава 7. Образцы выполнения лабораторных работ в Приложении 1.
Лабораторная работа “Криптографическая система RSA” . [2], глава 6.5. Образцы
выполнения лабораторных работ в Приложении 1.
Язык программирования СИ++, а также рекомендуется язык Python и его модуль
cryptolib, имеющий встроенную поддержку «длинной арифметики» и пакеты с
реализацией низкоуровневых криптографических хэш-функций.
Перечень литературы
1. А. В. Черемушкин Лекции по арифметическим алгоритмам в криптографии. ISBN
5-94057-060-7 М.: МЦНМО, 2002
2. Е.Б.Маховенко. Теоретико-числовые методы в криптографии.M.:Гелиос АРБ,2006.
Раздел 1. Введение в теорию чисел. Классы чисел и основная теорема
арифметики
§1. Делимость в кольце целых чисел
1.1. Временные оценки сложности арифметических операций
Делимость и алгоритм Евклида.
Основная теорема арифметики
Распределение простых чисел
§2. Сравнения с одним неизвестным
2.1. Отношение сравнимости. Полная система вычетов
2.2. Теорема Эйлера. Теорема Ферма
2.3. Сравнения 1-й степени
2.4. Китайская теорема об остатках
Раздел 2. Первообразные корни и квадратичные вычеты
§1. Сравнение 2-й степени. Символы Лежандра и Якоби
§2. Квадратичный закон взаимности
§3. Методы решения сравнений 2-й степени
§4. Первообразные корни
Раздел 3. Цепные дроби. Уравнение Пелля
§1. Определение цепной дроби
§2. Подходящие дроби
§3. Бесконечные цепные дроби
§4. Квадратичные иррациональности
§5. Использование цепных дробей для решения задач
§6. Уравнение Пелля
Раздел 4. Основы абстрактной алгебры
§1. Кольца: Евлидовы. Безу. Факториальные. Главных идеалов.
§2. Различные формы китайской теоремы об остатках.
§3. Конечные поля. Неприводимые многочлены.
Раздел 5. Быстрые алгоритмы для алгебраических структур
§1. Арифметические операции над целыми числами и полиномами
1.1. Сложность основных целочисленных алгоритмов
1.2. Алгоритмы арифметики в системе счисления с основанием B.
1.3. Умножение в классах вычетов
§2. Умножение с помощью быстрого преобразования Фурье
2.1. Дискретное преобразование Фурье
2.2. Алгоритм быстрого преобразования Фурье
2.3. Алгоритм Шенхаге-Штрассена для умножения целых чисел
§3. Модульное умножение
3.1. Метод Монтгомери
3.2. Модульное возведение в степень
§4. Целочисленное деление с остатком
4.1. Схема Горнера
4.2. Деление на 2m- c
4.3. Общий случай
Раздел 6. Тесты проверки чисел на простоту
§1. Вероятностные тесты проверки чисел на простоту
1.1. Тест Ферма
1.2. Тест Соловэя-Штрассена
1.3. Тест Миллера-Рабина
§2. Детерминированные алгоритмы проверки чисел на простоту
2.1. Проверка чисел Мерсенна
2.2. Проверка с использованием разложения числа n-1
Раздел 7. Разложение чисел на множители
§1. Разложение чисел на множители
1.1. Метод пробного деления
1.2.  - Метод Полларда
1.3. Факторизация Ферма и факторные базы
1.4. Метод квадратичного решета
1.5. Метод непрерывных дробей
§2. Приложения в криптографической системе RSA
Раздел 8. Факторизация многочленов над конечными полями
§1. Алгоритм Берлекемпа
§2. Метод Кантора-Цассенхауза
Практическая и самостоятельная работа
с методическими указаниями по разделам курса
Раздел 1: Введение в теорию чисел. Классы чисел и основная теорема
арифметики
§1. Делимость в кольце целых чисел [1]:
1.1. Временные оценки сложности арифметических операций
1.2. Делимость и алгоритм Евклида.
1.3. Основная теорема арифметики
1.4. Распределение простых чисел
1. Оценки функции сложности
При оценке сложности применяются методы редукции и сведения к
другим задачам с известными оценками сложности. Для функции сложности
получаются неравенства вида
f(n)  cf(n/a) + bg(n) + dn,
(1.1)
где a, b, c, d – некоторые положительные константы.
Свойства функции сложности:
a) f(n)  n;
b) kf(n)  f(kn), k >1.
Лемма 1. Если функции f(n) и g(n) удовлетворяют свойствам a), b) и при a>1,
b>0, c>0 выполняется неравенство (1.1), то f(n) = O(g(n)).
Лемма 2. Если при некоторых константах a>0, c>0, d>0
f(1) = d, f(n) = cf(n/a) + dn, то при n>1
f(n) = O(n), при a>c; f(n) = O(n log n) при a=c; f(n) = O(n log c ), при a<c.
Пример использования леммы 2 – умножение методом Карацубы:
A, B – два n–разрядных числа. Разобьем их на два слагаемых
A = 2kA1 + A0, B = 2kB1 + B0.
Тогда AB = (22k + 2k) A1B1 + 2k(Ao – A1)(Bo – B1)+ (2k +1)A0B0.
Таким образом, для вычисления произведения двух n-разрядных чисел
надо выполнить три умножения n/2 – разрядных чисел и некоторое
количество сложений, вычитаний и сдвигов. Имеем оценку f(n) = 3f(n/2) +
сn, с>0. По лемме 2: сложность умножения
М(n) < f(n) = O(n log 3 ).
Самостоятельная работа. Предлагается вычислить сложность
арифметических операций с целыми числами.
a
2
2. Сложность алгоритма Евклида
Пусть A>B>0. Обозначим A = r-1, B = r0, ri-2 = di ri-1 + ri при i = 1,…,k и rk-1
= dk+1.
Тогда (A, B) = rk и до получения остатка rk+1 = 0 необходимо выполнить
k+1 делений. Оценим число делений в алгоритме Евклида. Рассмотрим
последовательность чисел Фибоначчи f0, f1,…,fk,…, где f0 = 0, f1 = 1, fk = fk-1 +
fk-2, k2.
Лемма. При k>1 fkRk-2, где R = (1+ 5 )/2.
Теорема (Ламе): Для любого N, где 0<B<AN, число делений в алгоритме
Евклида не превосходит 1+log R N.
Непосредственно из этой теоремы получаем оценку сложности алгоритма
Евклида для нахождения (A,B) двух n-разрядных чисел:
O(M(n)(k+1)) = O(M(n) log n)  O(n2 log n).
Самостоятельная работа: 1) Найти оценки сложности для расширенного и
бинарного алгоритма Евклида. 2) [4], §4.
3. Сложность операций в кольце вычетов
Элементы кольца вычетов ZN отождествляем с числами в интервале
0A<N. Длина записи числа N n = log N. Сложность сложения и вычитания
O(n). Нахождение вычета произведения состоит из одного умножения двух
n-разрядных чисел и одного деления 2n-разрядного числа на n-разрядное,
сложность равна O(M(n)).
4. Метод Монтгомери
A =  2i ai и B  AB = a0B + 2(a1B + …2(an-2B + 2an-1B)…).
Выполняется за n шагов, на каждом шаге к текущему значению R
прибавляется aiB с последующим делением на 2, благодаря чему
полученные значения находятся в интервале 0R<N. К полученному в
результате работы числу 2-n AB mod N и 22n mod N снова применим алгоритм
Монтгомери. Поскольку 22n mod N вычисляется с помощью сдвигов и
вычитаний сложностью O(n2), как и сам алгоритм, сложность вычисления
O(n2) двоичных операций.
Самостоятельная работа: Методом Монтгомери найти произведение
[1]:2, упр.7.
5. Основная теорема арифметики
Основная теорема арифметики. Всякий элемент из N разлагается на
простые множители. Это разложение однозначно с точностью до порядка
простых сомножителей.
6. Представление чисел по основанию b
Число разрядов: Целое число n, удовлетворяющее неравенствам bk-1  n bk,
имеет k разрядов по основанию b, а также k=[ln n/ln b]+1.
Двоичные операции: Сложение двух k-разрядных двоичных чисел m,n требует
k двоичных операций. Time (умножение k-разрядного и l-разрядного
двоичных чисел) < kl  ([log2 n]+1)([log2 m]+1). Time (вычитание k-разрядного
двоичного число из l-разрядного)  max(k,l). Time (деление k-разрядного
двоичного числа на l-разрядно)  kl.
Умножение многочленов: Для умножения многочленов f(x) и g(x) степеней
n1, n2, соответственно, число двоичных операций для вычисления
коэффициента i+j=v ai bj при xv не превосходит (n2+1)( log 2 m+1)2 +
n2 (log 2 n2m2)+1, где 0<ai ,bj <m.
f(x) = O(g(x)) означает, что существуют числа B, C такие, что для x>B
следует f (x)< С (g(x)).
Примеры: a) Пусть f(x) – произвольный многочлен степени d с
положительным старшим коэффициентом. Тогда f(x)= O(xd).
b) Если f (n) – число двоичных разрядов числа n, то f(n) = O(log n). То же
имеем, если f(n) – число разрядов в разложении n по произвольному
основанию b.
c) Число двоичных операций при умножении n на m:
Time (n m) = O(log 2 m log 2 n).
d) Time ( ai xi bj xj) =O(n1n2((log2 m)2+log2 (min(n1, n2)))).
f(n) = O(1) означает, что функция f(n) ограничена некоторой константой.
Упражнения
1. Оценить время для перевода числа n из k бит в десятичную систему
счисления, а также в систему по основанию b.
Определение. Алгоритм для вычислений с целыми числами n1,…, nr из k1,…,
kr бит, соответственно, называется полиномиальным по времени, если
существуют такие целые числа d1,…, dr, что
число двоичных операций при
d
d
работе этого алгоритма равно O(k1 … kr ).
Таким образом, арифметические операции с целыми числами имеют
полиномиальные по времени алгоритмы.
2. В шестнадцатеричной системе с b=16 буквы A-F изображают цифры от 10
до 15, соответственно.
a) Разделить число (131B6C3)16 на (1A2F)16.
b) Объяснить, как переводятся числа из двоичной системы в
шестнадцатеричную и обратно и почему эти операции требуют много
меньше времени, чем в общей оценке для перевода из двоичной системы в bичную.
3. Оценить число двоичных операций для вычисления 3n в двоичной системе,
то же для nn .
4. Используя обозначение O(n) оценить число двоичных операций для
умножения двух матриц, если элементы матриц не превосходят m.
5. Пусть надо проверить простоту числа n при помощи последовательного
деления на все нечетные числа, не превосходящие n . Оценить число
двоичных операций. А если дан список всех простых чисел до n ?
6. Пусть n – очень большое целое число, записанное в двоичной системе
счисления. Найти алгоритм вычисления [ n ] за O(log3 n) двоичных
операций.
Делимость и алгоритм Евклида.
Предложение. Алгоритм Евклида всегда выдает (a,b) за конечное число
шагов. Для a>b Time((a,b)) = O(log 3 a).
Лемма. rj+1< rj /2.
7. Сколько делений производится алгоритме Евклида? Каково общее время
работы?
8. Какова временная сложность расширенного алгоритма Евклида?
Бинарного алгоритма Евклида?
9. Пусть n – положительное нечетное число.
a) Доказать, что существует взаимно однозначное соответствие между
такими делителями числа n, которые меньше n , и такими, которые больше
n.
b) Доказать, что существует взаимно однозначное соответствие между
множеством тех делителей числа n, которые не меньше n , и множеством
r
1
представлений n в виде разности s2- t2 квадратов двух неотрицательных
целых чисел. (Например, 15 имеет два делителя 5 и 15, которые не меньше
15 , и 15=42–12=82–72.)
10. a) Доказать, что следующий алгоритм находит d = (a,b) за конечное число
шагов. Заметим, что d = (a, b), так что можно считать, что a и b
положительные числа. Если a, b- оба четные, то d = (a/2, b/2), аналогично,
если одно из них четное: d = (a/2,b) или d = (a,b/2).
Если оба нечетные и a >b, то d = (a-b,b). Наконец, если a = b, то d = a.
Повторяем этот процесс, пока не получится последний случай.
b) Применить алгоритм из пункта a) для нахождения НОД(2613, 2171),
производя все действия в двоичной системе счисления.
c) Доказать, что алгоритм из пункта a) требует всего O(log2 a) двоичных
операций, если a > b.
12. Построить процедуру вычисления НОД для многочленов с помощью
расширенного алгоритма Евклида.
13. Гауссовыми числами называются комплексные числа, действительная и
мнимая части которых есть целые числа. На комплексной плоскости
гауссовы числа изображаются вершинами квадратов, которые образуют
целочисленную решетку. Если  и  – гауссовы числа, то (, ) есть
максимальное по модулю гауссово число , делящее  и . Модуль – это
расстояние от гауссова числа до начала координат. Заметим, что НОД
определен не единственным образом, а с точность до умножения на ±1 и ±i.
a) Определите алгоритм Евклида для гауссовых чисел.
b) Найдите (8 - 9i, 3 - 2i), (5 + 6i, 7 - 11i).
Указание: Представляйте НОД в виде линейной комбинации u+v, где u и v
– гауссовы числа.
14. Последняя задача дает эффективный способ представления некоторых
больших простых чисел в виде суммы двух квадратов.
Пусть p – простое число, делящее b6 + 1. Запишем p в виде p = c2+ d2, где c, d
– целые. Это эквивалентно p = c2+ d2 = (c + id) (c - id). Представим b6 + 1= (b2
+ 1)(b4 – b2 + 1) = (b2 + 1)((b2 – 1)2 + b2). По свойству делимости, простое число
p делит один из множителей в правой части. Если p(b2+1) = (b+i) (b - i), то
(p, b+i) = (c+id). Если p (b4 – b2+1) = ((b2–1) +ib) ((b2-1) -ib), то (p, (b2–1) +
ib)) = (c + id).
a) Воспользовавшись алгоритмом из пункта a), представить число 769,
которое делит 196+1, в виде суммы двух квадратов.
b) Зная, что число 38737 делит 236+1, представить 38737 в виде суммы двух
квадратов.
§2. Сравнения с одним неизвестным [1]:
2.1. Отношение сравнимости. Полная система вычетов
2.2. Теорема Эйлера. Теорема Ферма
2.3. Сравнения 1-й степени
2.4. Китайская теорема об остатках
1. Основные понятия
Отношение сравнимости и его свойства; полная система вычетов по
mod m, система наименьших неотрицательных вычетов; функция Эйлера.
Теорема Эйлера. m>1, натуральное, a – целое, (a,m) =1, то a(m)1 (mod m).
Теорема Ферма. ap-11 (mod p), где p- простое и p не делит a.
2. Сравнения 1-й степени
ax  b(mod m)
(2.1)
Теорема. Сравнение ax  b(mod m) имеет решение, если b делит d = (a.m).
Теорема. Если (2.1) разрешимо, x0 его решение, то x0, x0+m1, …, x0+(d -1)m1 –
все решения (2.1), где m1 = m/d.
Самостоятельная работа: [1]: 2, упр.4.
3. Китайская теорема об остатках
Система сравнений
x  a1(mod m1), x  a2(mod m2),…, x  ar(mod mr),
где m1, m2,… , mr –попарно взаимно просты, имеет решение
x0 = ai MiNi (mod m1m2 … mr), где Mi = m1m2 … mi -1mi+1 …mr,
Ni = Mi-1 (mod mi)
Самостоятельная работа: [1]: 2, упр.6.
(2.2)
Упражнения
1. Найти наименьшее неотрицательное решение каждой из следующих
систем сравнений:
x  2(mod 3)
x  12(mod 31)
19 x  103 (mod 900)
x  3(mod 5)
x  87(mod 127)
10 x 511 (mod 841)
p-2
2. Для , взаимно простого с p,  является обратным к  в кольце вычетов
по модулю p. Предположим, что p очень велико. Сравнить метод повторного
возведения в квадрат для вычисления p-2 с алгоритмом Евклида (как
способы нахождения -1 mod p) в случаях, когда:
a)  имеет примерно столько же цифр, что и p,
b) когда  много меньше p.
3. Число натуральных чисел из интервала [0, n], взаимно простых с n
определяет функцию Эйлера  (n).
a) Докажите, что для взаимно простых m и n верно  (nm) =  (n)  (m).
b) Докажите, что для простого p верно  (pn).= pn – pn-1.
c) Докажите, что (mn ) = mn-1 (m).
d) Докажите, что сумма (d), взятая по всем натуральным d, делящим n,
равна n.
4.Функция f(n) при (m,n) =1 обладает свойством f(m.n) = f(m)f(n), то f(n)
называют мультипликативной функцией.
a) Докажите, что мультипликативной функцией являются:
функция Мебиуса  (n),
функция d(n) – число всех различных натуральных делителей числа n,
функция (n) – сумма всех этих делителей, функция k(n) – сумма k-х
степеней этих делителей.
b) Если f(n) мультипликативная функция, то функция g(n) , равная сумме f(d)
по всем d, делящим n, тоже мультипликативная.
5. Определим функцию Мебиуса  (n), равную нулю для любого числа,
содержащего среди своих делителей хоть один квадрат целого числа, и
равную (-1)k в противном случае, где k – число всех простых делителей числа
n. Докажите, что
a) Сумма  (d) по всем натуральным d, делящим n, равна 0 при n > 1 и равна
1 при n = 1.
Указание. Воспользуйтесь тождеством an –1 = (a–1)(1+a+…+an-1).
b) Если при любом x  1 имеем g (x) = f(x/n), n = 1,…,[x], то f(x) =  (n) g
(x/n), n=1,…,[x].
6. Докажите, что
a) если 2n–1 простое, то n – также простое число (такие числа называются
простыми числами Мерсенна);
b) если 2n +1 – простое, то n – степень двойки (такие числа называются
простыми числами Ферма);
c) при каких натуральных n числа 2n -1 и 2n +1 оба простые?
d) (Формула Мебиуса - Чебышева). В обозначениях предыдущего пункта
докажите, что f(n) равна сумме  (n/d) g(d) по всем натуральным d, делящим
n.
e) Докажите, что (n)/n равна сумме (d)/d по всем натуральным d, делящим
n.
7. Протокол (n, k) – пороговая система разделения секрета:
Пусть N – очень большое секретное число, используемое для
разблокирования ракетной системы, т.е. знание N позволяет запустить
ракету. Предположим, что есть командующий и n генералов. Чтобы
застраховаться от ситуации, когда командующий будет выведен из строя,
желательно, чтобы каждый из генералов обладал частичной информацией
относительно N, достаточной для того, чтобы любые три генерала могли бы,
действуя согласованно, запустить ракеты, но никакие два из них не могли бы
этого сделать.
a) Пусть p1,…,pn – различные простые числа, каждое из которых больше 3 N ,
но значительно меньше N . Используя числа p1,…,pn , опишите частичную
информацию о числе N, которую нужно предоставить генералам.
b) Обобщите этот способ на случай, когда доступ к системе открывается при
согласовании действий любых k генералов (k  2), а никакие k - 1 из них не
могли бы разблокировать систему.
8. В следующей задаче излагается математическое содержание
криптосистемы RSA:
Обозначим через Zn\ {0} – множество всех чисел a, таких, 1 a <n, (a,n) =1, а
для любого целого m остаток от его деления на n обозначим через m mod n.
Пусть n = pq, где p, q – различные простые числа, и число tZn\ {0} такое,
что st при делении на (n) дает в остатке 1.
a) Докажите, что отображения x  f(x) = xs mod n и x  g(x) = xt mod n
взаимно однозначно отображают множество Zn\ {0} в себя и взаимно
обратны друг другу, т.е. при любом x Zn\ {0} имеем f(g(x)) = x.
b) Докажите, что утверждение (a) справедливо и для всего Zn.
Указание. Установите следующий факт (криптографическая лемма): для
любых целых x и k и для n, равного произведению двух разных простых
чисел, справедливо равенство xk(n)+1mod n = x mod n.
c) Докажите, что отображение x  f(x) = xs mod n всегда имеет 4
“неподвижных точки” во множестве Zn\{0} и 9 “неподвижных точек” во
множестве Zn (“неподвижная точка” отображения – это такое число a,
которое переходит в себя при этом отображении).
d) Докажите, что если s - 1 будет общим кратным чисел p -1 и q -1, то
отображение x  f(x) = xs mod n будет тождественным.
e) Отображение x  xs множества Zn\ {0} в себя можно использовать для
“открытого шифрования”. Шифрование производится быстро с помощью
компьютера, s, n –открытые ключи. Дешифрование производится быстро,
если известен секретный ключ t.
Атакующему эту систему для нахождения числа t, исходя из равенства
st =1 (mod (n)), надо знать число (n) = (p -1)(q -1) = n +1 – p - q, т.е. p и q.
Вы выбираете p и q очень большими, сообщаете всем число n = p q и
произвольное s такое, что (s, (n)) = 1, и можете быть уверенными, что пока
не будет известен алгоритм быстрого разложения на простые множители,
ваша секретная система будет надежной. Исходя из теории сложности
вычислительных алгоритмов, эта задача асимптотически суперсложная.
Для предотвращения очевидных атак на эту систему рекомендуется:
- не выбирать числа p и q слишком близкими друг к другу (рекомендуется,
чтобы их двоичные записи отличались по длине на несколько разрядов), так
как тогда облегчается задача факторизации числа n;
- не допускать, чтобы p -1 q -1 и наоборот, и чтобы эти числа не имели бы
большой общий делитель, иначе можно найти ключ t перебором;
- не допускать, чтобы в разложении (n) на множители встречались только
малые простые числа (по той же причине).
- не допускать использовать слишком малые числа s и t (так как опять
появляется возможность нахождения ключа перебором, правда, в случае
малого s для этого надо суметь перехватить одинаковое сообщение,
посланное многим разным получателям), а также такие числа s , что s -1
будет общим кратным чисел p -1 и q -1, например, s = (n)/2+1, так как тогда
зашифрованный текст всегда просто совпадает с незашифрованным. Кроме
того, во всех случаях надо следить, чтобы случайно не попасть в
“неподвижную точку”.
6. (Китайская теорема об остатках). Пусть mi (i =1,…,n) – попарно взаимно
простые числа, Mi есть произведение этих чисел, кроме mi. Найдется такое
натуральное число ai , что ai Mi при делении на mi дает в остатке 1.
a) Докажите, что для любых ni, 0 ni < mi , число niai Mi при делении на mi
дает остаток ni .
b) Генерал-аншеф Раевский хочет построить для парада своих солдат в
несколько равных квадратных каре, но он не знает, сколько солдат (от одного
до двадцати) находится в лазарете. Докажите, что у генерала могло бы быть
такое количество солдат, что он, независимо от заполнения лазарета, смог бы
выполнить свое намерение.
7. (Применение китайской теоремы об остатках в криптологии) Допустим,
что требуется организовать доступ к секретной информации на компьютере
для трех сотрудников банка так, чтобы они могли получить ее только
собравшись втроем. Каждый получает ключ – некоторое большое (например,
стозначное) число, которое он хранит в секрете от остальных. Паролем
является никому не известное число, которое можно быстро определить с
помощью компьютера по трем упомянутым ключам, В случае же отсутствия
одного из них потребуется осуществить перебор 91099 вариантов возможного
значения ключа.
a) Предложите алгоритм определения пароля по ключам, основанный на
применении китайской теоремы об остатках.
Указания. Выберем три больших попарно взаимно простых числа, например
числа Ферма. Возьмем N =2n, тогда a1 = 2N+1 a2 =22N+1, a3 = 24N +1. Пусть i-й
участник в качестве ключа выбирает произвольное число ki в границах от 1
до ai -1. Тогда, собравшись вместе, они могут выработать пароль k, взяв в
качестве его такое число в пределах от 1 до a -1, a = a1 a2 a3 , которое при
делении на ai дает в остатке ki . Число k можно вычислить по формуле k = k  [k  / a] a, где k  = k1 n1 + k2 n2 + k3 n3 , ni mi - a1 q1 =1, mi = aj ak, j  k  i .
Для вычисления ni применить алгоритм Евклида. Вычислить пароль k
нетрудно. Если двое, в тайне от третьего, захотят найти ключ k, то им
придется перебрать все возможные варианты третьего ключа (потому что
разным способам выбора ключей соответствуют разные значения k), т.е. 2N
вариантов. Используя результаты о сложности умножения и деления с
остатком многозначных чисел и оценки числа шагов алгоритма Евклида,
можно оценить сложность алгоритма вычисления общего ключа как NM(N),
M(N) – сложность умножения N – разрядных чисел. Применение алгоритма
Карацубы дает оценку N log 6. Использование более совершенных алгоритмов
умножения и решения линейных уравнений с двумя неизвестными в целых
числах позволяет получить оценку N log N log log N.
Раздел 2. Первообразные корни и квадратичные вычеты [1]
§1. Сравнение 2-й степени. Символы Лежандра и Якоби
§2. Квадратичный закон взаимности
§3. Методы решения сравнений 2-й степени
§4. Первообразные корни
1. Сравнения 2-й степени:
x2  a (mod m), где m >1, (a, m) = 1.
(1.2)
Если сравнение разрешимо, a называется квадратичным вычетом по
od m, в противном случае – квадратичным невычетом по mod m.
Методы решения сравнений (1.2) для m = p, где p не делит a:
Если символ Лежандра (a / p) = 1, то сравнение (2.3) разрешимо и имеет
точно два решения.
а) Пусть p = 3 (mod 4), то есть p = 4m + 3, то 1= (a / p) = a p-1 /2 =
a 2m+1 (mod p), откуда
x1 = am+1 (mod p),
x2 = - am+1 (mod p).
б) Пусть p = 5 (mod 8), т. е. p = 8m + 5, то 1 = (a / p) = a p-1 /2 =
a 4m+2 (mod p), откуда a 2m+1 =1 (mod p) или a 2m+1 = -1 (mod p).
В первом случае имеем решение x1 = am+1 (mod p) и x2 = - am+1 (mod p).
Во втором случае, заметим, что число 2 является квадратичным невычетом
при p = 5 (mod 8), тогда по свойству 3 символа Лежандра ( 2 / p) = 2 p -1 / 2 =
2 4m + 2 = -1 (mod p). Тогда a 2m+1 2 4m + 2 = 1 (mod p).
Получаем решения x1 = a m+1 2 2m + 1 (mod p) и x2 = - a m+1 2 2m + 1 (mod p).
Самостоятельная работа: [1]: 2 упр.7, 8,13, 14.
Случаи составного модуля:
Теорема: p  2, простое, p не делит a, n  1. Сравнение
x2  a (mod pn)
(2.4)
разрешимо тогда и только тогда, когда
x2  a (mod p),
(2.5)
разрешимо.
Порядком числа a, 1  a < m, (a, m) = 1, по mod m называется наименьшее
натуральное число d, для которого a d  1 (mod m). Если порядок d = (m),
число a называется первообразным корнем по mod m.
Теорема: Для любого простого p  2 существует первообразный корень по
mod p2.
Теорема: Если сравнение (2.3) разрешимо, то оно имеет ровно два
решения.
Теорема: Пусть число a нечетное, то
cравнение x2  a (mod 2) разрешимо при любом a;
cравнение x2  a (mod 22 ) разрешимо тогда и только тогда, когда
a  1 (mod 4);
cравнение x2  a (mod 2n ), где n  3. разрешимо тогда и только тогда, когда
a  1 (mod 8).
Теорема. Пусть m = m1 m2…mr, где числа m1, m2,…,mr попарно взаимно
просты. x2  a (mod m1), x2  a (mod m2),…, x2  a (mod mr). (2.6)
Сравнение (2.6) разрешимо тогда и только тогда, когда разрешимы все
сравнения x2  a (mod mi) (i=1,..,r).
Следствие 1. Пусть (m, a) = 1, cравнение x2  a(mod m) разрешимо тогда и
только тогда, когда a = 1 (mod 4) при n = 2; a = 1 (mod 8) при n  3
Cравнение (2.6) имеет 2s решений при n = 0 или n = 1;
2s+1 решений при n = 2;
2s+2 решения при n  3.
Следствие 2. Если число m имеет хотя бы два взаимно простых делителя,
то число квадратичных вычетов по mod m строго меньше, чем число
квадратичных невычетов.
Самостоятельная работа: [1]: 2, упр.15, 16.
Упражнения
1. Первообразный корень по простому модулю и первообразный корень по
модулю, равному степени простого числа.
Множество чисел от 1 до n-1, взаимно простых с числом n, обозначаем как
Zn\ {0}.
a) Докажите, что все числа из множества M, содержащихся в Zn\ {0}, можно
расставить по кругу так, что для любых трех соседних чисел a,b,c разность
b2- ac будет делиться на n тогда и только тогда, когда при некоторых
натуральных числах f и g i-е от начала число равно остатку от деления f 
g i-1 на n при любом i, при этом gm при делении на n дает в остатке 1, где
m – количество чисел во множестве M.
Число m назовем порядком числа g по mod n, а расстановку чисел по
кругу – циклом порядка m.
b) Если цикл содержит 1, то элементы цикла совпадают с остатками от
деления чисел 1,g,…,gm-1 на n, причем остаток от деления gm на n равен 1.
Элемент g тогда называется порождающим элементом цикла.
c) Докажите, что число g имеет порядок m по модулю тогда и только тогда,
когда g-ичная дробь, изображающая 1/ n, имеет период длины m.
d) Докажите. Что все элементы множества Zn\ {0}можно расположить по
циклу тогда и только тогда, когда это множество имеет порождающий
элемент (называемый первообразным корнем по модулю n). Докажите, что
если первообразные корни по модулю n существуют, то их ровно  ( (n))
штук.
e) Докажите, что порядок любого числа по модулю n делит (n) и выведите
отсюда теоремы Ферма и Эйлера.
m) Докажите, что если порядок числа g по простому модулю p равен m, то
множество всех чисел из Zn\ {0}, порядок которых делит m, совпадает с
множеством остатков от деления чисел 1, g, g2,…,gm-1 на p.
2. Множество M, содержащееся в Zn\ {0}, является циклическим, если все
его числа можно расставить по кругу так, что для любых трех соседних чисел
a, b, c разность b2- ac будет делиться на n.
a) Если p – простое число и p >2, то множество Zm\ {0} для m = pn, m =
2pn – циклическое.
Пусть  Zn\ {0} – первообразный корень (образующий) циклического
множества Zm\ {0}. Индексом числа x из Zm\ {0} по основанию  назовем
минимальное положительное n, такое, что остаток от деления n на m равен
x, обозначим его ind x. Назовем произведением чисел a и b из Zm\ {0} такое
число c из Zm\ {0}, что m  ab-c.
b) Для любых x, y из Zm\ {0} индекс их произведения равен остатку от
деления на (m) суммы их индексов, а индекс частного равен остатку от
деления на (n) разности индексов.
c) Пусть d = (n,(m)). Если d  ind a, то во множестве Zm\ {0} имеется
ровно d чисел b таких, что m  bn - a. Если d не делит ind a, то таких чисел
нет.
d) Во множестве Zm\ {0} имеется ровно (m) / d чисел a, для которых
существуют такие числа b, что m  bn-a. Множество таких чисел a
совпадает с множеством таких чисел в Zm\ {0}, порядок которых делит (m) /
d.
e) Порядок любого числа x из Zm\ {0} равен (m) / ((m), ind x). В
частности, x будет первообразным корнем в Zm\ {0} тогда и только тогда,
когда (ind x,(m)) =1. Число всех элементов в Zm\ {0}, имеющих порядок ,
равен (). В частности, число первообразных корней в Zm\ {0} равно
((m)).
3. Нахождение индекса произвольного элемента из Zp относительно
заданного первообразного корня a, называемое дискретным
логарифмированием, требует большого числа вычислений и при p,
состоящим из нескольких сотен цифр, не под силу даже суперЭВМ. Лишь в
случае, когда p -1 имеет только малые простые множители, известен
сравнительно быстро работающий алгоритм дискретного логарифмирования
(Полига-Хеллмана). На предположении о труднорешаемости задачи
дискретного логарифмирования основана система Диффи-Хеллмана
открытого распределения ключей.
Предложите протокол выработки общего ключа, роль которого играет
некоторый элемент из Zp\ {0}, причем для его выработки требуется
обменяться двумя элементами из Zp\ {0}. Каждый из партнеров вычисляет
свой элемент, пользуясь своим ключом (секретным элементом), а потом,
получив вычисленный партнером элемент, с помощью того же ключа
вычисляет общий ключ. Алгоритм вычисления общего ключа должен быть
простым, а алгоритм взлома этой системы трудоемким.
4. Число a называется квадратичным вычетом по модулю p, если оно не
делится на p и существует такое b, что p  b2- a , и квадратичным невычетом
по модулю p,, если оно не делится на p и не существует такого b. Другими
словами, квадратичное сравнение x2 = a mod p, соответственно, разрешимо
или не разрешимо.
a) (Эйлер) Во множестве Zp\ {0}, p>2, поровну квадратичных вычетов и
невычетов. Произведение вычетов есть вычет, произведение двух невычетов
– опять вычет, а произведение вычета на невычет есть невычет. Число p -1
является вычетом тогда и только тогда, когда p = 4k +1.
По определению, символ Лежандра (a /p) равен 1, если a – вычет, и равен -1,
если a –невычет, (a /p) = 0, если p делит a.
b) (Эйлер) Докажите, что (a /p) и a p-1 / 2 имеют равные остатки при делении
на p и
(a /p) (b /p) = (ab /p).
c) (Эйлер-Гаусс) Докажите, что (2 / p) = (-1) k, где k = (p2-1) / 2.
d) (Эйлер-Лежандр-Гаусс) Докажите, что для любых простых нечетных p и
q имеем (p /q) (q /p) = (-1) (p -1) /2  (q -1)/2.
Раздел 3. Цепные дроби. Уравнение Пелля. [1]
§1. Определение цепной дроби
§2. Подходящие дроби
§3. Бесконечные цепные дроби
§4. Квадратичные иррациональности
§5. Использование цепных дробей для решения задач
§6. Уравнение Пелля
Самостоятельная работа: [1],
Упражнения
1. Для выяснения, является ли данная дробь A/B несократимой, или ее можно
сократить, заменив на равную дробь с меньшими числителем и
знаменателем, имеется замечательный способ, алгоритм Евклида. Этот
алгоритм находит (A,B) , после чего остается разделить A и B на (A,B). Его
работа состоит в делении с остатком: сначала A на B, получаем частное d1 и
остаток r1, потом делим A на r1, получаем частное d2 и остаток r2, и т.д.,
пока не получим остаток rn = 0. Результаты делений можно записать в виде
равенств:
A = B d1 + r1, B = r1 d2 + r2, r1 = r2 d3 + r3 ,…, rn -2 = rn -1 dn.
a) Докажите, что (A,B) = (B, r1) = (r1, r2) = …= (rn -1, rn) = rn - здесь указана
связь между получающимися остатками. Связь между частными задана через
обыкновенную цепную дробь:
Если выполнить все действия, указанные в цепной дроби, то ее можно
преобразовать в обыкновенную, обозначая ее числитель и знаменатель в
виде [d0,…, dn] и [d1,…, dn].
Дробь, образованную первыми k этажами назовем k-й подходящей дробью
для исходной дроби. Ее величина изображается обыкновенной дробью
[d0,…, dn] / [d1,…, dn], которую для краткости обозначим pk /qk. Дробь
[dл+1,…, dn] / [dл+2,…, dn] назовем k-м остатком и обозначим rk.
b) Проверьте, что [d0,…, dn] / [d1,…, dn] = [d0,…, dk-1, rk] / [d1,…, dk-1, rk].
с) Докажите, что при k  2 : pk = dk pk-1 + pr -2, qk = dk qk-1 + qk -2.
d) Докажите, что [d0,…, dn] / [d1,…, dn] = rk pk-1 + pr -2 / rk qk-1 + qk -2.
e) Докажите равенства
pk /pk-1 = [dk,…, d0] / [dk-1,…, d0],
qk /qk-1 = [dk,…, d1] / [dk-1,…, d1].
2. Последовательность чисел{Fn}, определенная равенствами F1 = F2 = 1, Fn
= Fn -1 + Fn -2, n = 3,4,…, называется последовательностью Фибоначчи.
m) Проверьте, что n-этажная цепная дробь 1 +1/1+…1/+1 равна
Fn+2 / Fn+1.
n) Докажите, что для любой подходящей дроби pk /qk верно qk  Fk+1.
o) Докажите формулу Бине
Fn = (n - (-) -n ) / 5, где  = (5 +1) / 2,
так называемое золотое сечение.
Покажите, что Fn - ближайшее целое к числу n / 5, а также, что
Fn  m  n  [log (5(m+1/2))].
p) (Ламе) Докажите, что наибольшее число делений в алгоритме Евклида для
нахождения (a,b) не превосходит [log (5(max(a,b) + 1/2))] - 1.
r) Докажите, что (Fn, Fn+1) = 1.
s) (Люка) Докажите, что (Fn, Fm) = F(n,m)
u) Покажите, что для любой цепной дроби подходящие дроби с четными
номерами образуют возрастающую, а с нечетными – убывающую
последовательность. При этом любая дробь с нечетным номером больше
любой дроби с четным номером.
v) Пусть  - значение цепной дроби, тогда   - pk / qk  1 / qk qk+1.
2. Заметим, что любое рациональное число разлагается в конечную цепную
дробь, а иррациональное число – в бесконечную. Бесконечная цепная дробь
называется сходящейся, если существует конечный предел
 = lim pk / qk, где  принимается за значение этой цепной дроби, в
противном случае – расходящейся, и ей не приписывается никакого
значения.
Некоторые обыкновенные дроби невозможно точно выразить в виде
конечных десятичных дробей, а лишь в виде бесконечных периодических
дробей, причем период может начинаться не сразу после запятой,
отделяющей целую и дробную части, а после так называемого предпериода.
Правильная десятичная дробь называется чисто периодической, если период
начинается сразу после запятой. Остальные дроби называются смешанно-
периодическими, а часть десятичной записи между запятой и началом
первого периода называется предпериодом.
Так дробь 1/7 = 0, 142857142857…= 0,(142857) – чисто периодическая с
периодом длины 6, а дробь 13931/70000 = 0, 1990142857142857…=
0,1990(142857) – смешанно -периодическая с предпериодом длины 4 и
периодом длины 6.
a) Пусть n делится на простое число, не равное 2 или 5, и r - остаток от
деления 10 m на n. Тогда, если 0,c1 c2 c3… - десятичная запись числа m/n,
то 0,c2 c3 c4…-десятичная запись числа r/n.
b) Докажите, что любая обыкновенная дробь представима в виде конечной
или периодической десятичной дроби.
c) Докажите, что для произвольной дроби m/n длина периода ее десятичной
записи равна наименьшему числу t, для которого найдется натуральное k
такое, что n делит 10k(10t -1) При этом наименьшее k, удовлетворяющее
предыдущему условию, будет длиной предпериода. Докажите, что длина
предпериода десятичного разложения правильной дроби со знаменателем n
не превосходит log2 (n/3). Равенство достигается для несократимых дробей
со знаменателем 32k и только для них.
d) Докажите, что сумма длин периода и предпериода десятичной записи
дроби m/n меньше n.
e) Докажите, что сумма длин периода и предпериода десятичного
разложения любой правильной дроби со знаменателем n, не превосходит 
(n) - числа всех несократимых правильных дробей со знаменателем n.
Равенство возможно лишь для дробей с чисто периодическим разложением.
Проверьте, что дробь 1/49 имеет период (49) = 42.
Из предыдущей задачи следует, что длина периода десятичной записи
дроби со знаменателем n не превосходит n -1 и равенство возможно лишь
при простом n. Однако неизвестно, конечно или бесконечно их количество.
Гаусс предположил, что число таких простых n бесконечно, а позднее
Артин высказал более общую гипотезу.
o) Пусть (n, 10) =1. Докажите, что период дроби m/n будет делителем числа
 (n).
m) (Теорема Эйлера) Докажите, что при (a, n) = 1 имеем n  a (n).-1, и для
произвольного a и простого p имеем p  a p -1.(Теорема Ферма).
2. Уравнение Пелля
Число называется квадратичной иррациональностью, если оно является
корнем квадратного уравнения с целыми коэффициентами. Любая
квадратичная иррациональность имеет вид u+v N, где числа u, v –
рациональные, а N не является полным квадратом.
Квадратичная иррациональность u -v N, называется сопряженной к u+v
N.
Теорема Лагранжа. Квадратичные иррациональности и только они могут
быть представлены в виде бесконечной периодической обыкновенной цепной
дроби.
Уравнением Пелля называется диофантово уравнение вида x2 - Ny2 = 1, где
натуральное число N свободно от квадратов.
Упражнения
a) Проверьте, что если (x1, y1 ) и (x2. y2) - решения этого уравнения, то
натуральные x и y такие, что x+y N = (x1+y1 N) (x2+y2 N), также его
решения.
b) Докажите, что если два числа представимы в виде x2 – N y2, где x и yнатуральные, то их произведение тоже представимо в таком виде.
c) Разложим N в цепную дробь. Докажите, что 0 < x=p2n2 – Nq2n2 <
2 N +1.
d) (Лагранж) Докажите, что уравнение Пелля x2 - Ny2 = 1 имеет бесконечно
много решений в целых числах. Кроме того, существует такое решение (x1,
y1), что каждое другое решение (xk, yk) задается соотношением xk + ykN = 
(x1 + y1 N)k.
Скажем что решение уравнения Пелля (x1, y1 ) больше, чем решение
(x2. y2), если (x1+y1 N) > (x2+y2 N). Наименьшее решение (x, y) с
положительными x и y называется фундаментальным.
e) Показать, что для любого другого решения с положительными u и v
выполняется равенство (u+v N) > (x+y N)k для некоторого целого k.
i) Фундаментальное решение можно найти, раскладывая N в цепную
дробь (метод Браункера).
j) Решить уравнение Пелля x2 - Ny2 = 1 для N= 5,6,8,11,12,13,31,83.
Самостоятельная работа:
a) Разложить в цепную дробь числа: 1/3; 2/3; 3, 14159; 3,14160; 51/11;
1725/1193; -1193/1725; 1103/87.
Для каждого разложения найти подходящие дроби.
b) Разложить в цепную дробь числа: 5; 1/5; 2 – 1/5.
Для каждого разложения найти первые пять подходящих дробей.
c) Разложить в цепную дробь числа: (n2 +1); (n2 +2), где n – натуральное
число.
d) Доказать, что для обыкновенной цепной дроби [0, a,…,a] справедливо
тождество Pn2 + Pn+12 = Pn-1 Pn+1 + Pn Pn+2.
e) С помощью цепных дробей найти все целые решения уравнения
85x – 53y = 5.
f) Доказать тождества:
[0;1,1,…]3 = [0;4,4,…];
[0;1,1,…]2 = [0;1/3,{-1/3}].
i) Разложить в цепную дробь функции:
(2+x)/(1-3x+5x2);
(1-2x+ 3x2)/(1+2x-x2+x3).
k) Решить диофантово уравнение: 31x -23y =11.
l) Решить уравнение x2 - 34y2 = 1, раскладывая число 34 в цепную дробь.
Раздел 4. Основы абстрактной алгебры
(Обобщение арифметики целых чисел)
§1. Кольца: Евлидовы. Безу. Факториальные. Главных идеалов.
§2. Различные формы китайской теоремы об остатках.
§3. Конечные поля. Неприводимые многочлены.
1. Кольца. Основные определения
Элемент x коммутативного кольца R с 1 называется обратимым
(единицей), если найдется элемент yR, что xy=yx=1.Множество всех
единиц кольца R образует мультипликативную группу, обозначаемую U(R).
Элемент x кольца R делит y (в R), если существует элемент zR, что
xz=y, обозначается x  y, что эквивалентно Rx  Ry. Для Rx = Ry элементы
x и y неразличимы, назовем их ассоциированными, обозначается x y. Для
кольца R без делителей нуля x=y, где  - обратимый элемент.
Элемент pR называется неприводимым, если он не является ни нулевым, ни
обратимым и его единственными делителями являются 1 и p. Для идеалов это
равносильно тому, что идеал Rp является максимальным во множестве
главных идеалов в R, отличных от R и {0}. В кольце без делителей нуля это
означает, что из p=dc следует, d или c- обратимый элемент в R.
Кольцо факториальное, если оно без делителей нуля и удовлетворяет
основной теореме арифметики.
Элемент p кольца R называется простым, если он отличен от нуля, не
является обратимым и удовлетворяет условию: p=ab, то p  a или p  b. Для
факторкольца это означает, что R/Rp не имеет делителей нуля.
Идеал I кольца называется простым, если он отличен от R и для ab I
следует. что aI или bI, что равносильно тому, что факторкольцо R/I не
имеет делителей нуля.
Евклидово кольцо – кольцо с евклидовым делением. Евклидово деление в
кольце R есть оператор /: RхRR, для которого существует отображение 
кольца R во вполне упорядоченное множество, удовлетворяющее
соотношению:
(a,b)  RхR (a – b(a/b)) < (b).
Отображение  называется алгоритмом Евклида. Если оно удовлетворяет
свойству: (a,b)  RхR  (q,r) RхR такая, что a = bq + r и (r) < (b).
То же для факторкольца: для всякого b в R существует система
представителей в R/Rb, элементы r которых удовлетворяют неравенству
(r) < (b).
Теорема (Евклидово деление многочленов). Пусть a(x), b(x) два многочлена
с коэффициентами в поле K, b(x) – ненулевой. Существует алгоритм,
позволяющий вычислить такие многочлены q(x) и r(x), что a(x) = b(x) q(x) +
r(x) и deg r(x) <deg b(x). Многочлены q(x) и r(x) определяются однозначно.
Замечание 1. Мы теперь знаем два основных примера евклидовых колец: Z и
K[X], где K-поле, которые имеют, с точки зрения деления, одинаковое
поведение. В частности, все их идеалы главные, что является достаточным
условием для выполнения основной теоремы арифметики. Введенные
классы колец связаны следующими строгими отношениями: {кольца без
делителей нуля}{кольца главных идеалов}{факториальные кольца}.
8. В кольце Безу всякий конечный идеал главный. Пусть A – кольцо Безу, то
для p- неприводимого x  A\Ap u,vA (1 = ux+vp).
Замечание 2. Кольца, отличные от кольца целых чисел, имеют целый ряд
приложений, о которых речь пойдет в следующих разделах. Пока можно
заметить, что, например, арифметика кольца Z[3] связана с критерием
простоты Лукаса -Лемера. Этот критерий, касающийся чисел Мерсенна, т.е.
чисел вида 2q -1, позволяет найти самые большие известные к настоящему
времени простые числа. Однако это предполагает вычисления с большими
числами и требует неординальных методов, например, преобразований
Фурье, китайской теоремы об остатках, алгебраических структур с корнями
из единицы, в частности арифметики в циклотомическом кольце Z[n1].
Упражнения
1. Показать, что для коммутативного кольца R простой характеристики p для
любых a1,…, as R: (a1+…+ as)q = a1q +…+ asq, где q=pk для любого
натурального k.
2. Для коммутативного кольца с единицей доказать:
a) Идеал M является максимальным т.и т.т., когда R/M – поле.
б) Идеал P является простым т.и т.т., когда R/P – целостное кольцо.
в) Если R – кольцо главных идеалов, то R/(p) – поле т.и т.т., когда p- простой
элемент кольца.
3. Доказать, что в факториальном кольце выполняются следующие свойства:
a) c(a,b) = (ca,cb);
b) c{a,b} = {ca,cb};
d) a bc и (a,b) = 1, то a c;
e) a c и b c и (a,b) =1, то ab c.
4. Доказать, что конечное кольцо без делителей нуля есть поле.
2. Конечные поля
Если мультипликативная полугруппа кольца есть абелева группа, то кольцо
становится полем.
Характеризация конечных полей:
1) Для каждого простого числа p факторкольцо Z/(p) является конечным
полем, состоящим из p элементов, обозначаемое Fp. Простое число p = char
F- характеристика поля. Каждое поле характеристики p есть расширение
простого поля Fp.
2) Поле F, содержащее подполе K из q элементов, имеет порядок qm, где
m=[F:K], и рассматривается как векторное пространство над полем K.
3) Все элементы поля Fq являются корнями многочлена xq – x. Если K –
подполе поля Fq и xq – x K[x], то Fq есть поле разложения многочлена
xq – x.
4) Критерий подполя: Fpm  Fpk  m k, где p-простое число.
5) Мультипликативная группа Fq ненулевых элементов конечного поля Fq
циклическая.
6) Образующий элемент циклической группы Fq называется примитивным
элементом поля Fq . Поле Fq содержит (q-1) примитивных элементов, где
 - функция Эйлера.
7) Пусть Fpm  Fpk , тогда Fpk = Fpm () – простое алгебраическое расширение
поля Fpm, где  - любой примитивный элемент поля Fpk.
8) Полином f(x)  K[x] неприводим над полем K, если он не имеет
нетривиальных разложений над этим полем (также его корни не принадлежат
полю K).
9) Кольцо полиномов F[x] является кольцом главных идеалов, где
порождающий идеала неприводимый полином.
10) Корни неприводимого полинома f(x)  Fq [x] степени m: , q,…,
q m -1 - простые. Его полем разложения является Fqm .
11) Пусть g(x) – многочлен степени n с коэффициентами в поле K. Тогда
факторкольцо K[X]/(g(x)) есть векторное K - пространство размерности n.
Если g(x) неприводим, то это - поле. Если поле К – конечное, состоящее из k
элементов, то K[X]/(g(x)) – поле, состоящее из k n элементов.
13).Теорема. Пусть p - простое число из N, nN. Для неприводимого
многочлена g(x) Fp[X] имеет место: g(x)  Xq – X , где q=pn, т.и т.т., когда
deg g(x)  n.
Следствие. Число неприводимых нормированных многочленов в Fp[X]
степени n
Ipn = 1/n  (d) pn/d, где (d) – функция Мебиуса.
dn
Следствие (Критерий неприводимости по модулю p). Пусть p – простое
число, n > p, g(x) Fp[X], deg g(x) = n, тогда g(x) неприводим т. и т.т., когда
g(x)  Xq – X , где q=pn, и (Xz-X, g(x)) =1, для z= n/d для всех простых
делителей d числа n.
14) (Критерий неприводимости Эйзенштейна). Пусть R – факториальное
кольцо и K его поле дробей, g(X) = anXn +…+a1X1+ a0 – многочлен с
коэффициентами из R, и для некоторого простого числа pR: p  a0, p  a1,…,
p  an-1, но (p  aт) и (p2 a0), Тогда g(x) неприводим в K[X], следовательно
и в R[X].
Упражнения
1.Пусть C корень n-й степени из 1 и g(x) - неприводимый делитель Xn-1,
для которого  является корнем, Доказать, что если p – простое число, не
делящее n, то g(p) = 0.
Доказательство. Пусть xn-1 = g(x) f(x). Предположим, что g(p)  0, тогда
f(p) = 0, тогда  - корень (g(x), f(xp)). Но g(x) – неприводим, значит,
g(x)  f(xp).
2. Доказать, что характеристика кольца без делителей нуля есть 0 или
простое число p. В случае поля K доказать, что отображение m  m1 есть
морфизм поля Q  K или Zp K.
Конечное поле имеет характеристику p > 0. Если K  K два конечных поля,
то доказать, что  K есть степень  K  (в частности, если K – конечное поле
характеристики p, то  K  есть степень p).
3. Пусть q - степень простого числа p и K - поле характеристики p.
Доказать, что если K – поле порядка q, то все корни многочлена Xq - X
содержатся в K. Доказать обратное, рассматривая автоморфизм Фробениуса
x xq. Показать, что множество неподвижных точек Fq = { xK: xq = x }
является единственным подполем поля K, содержащим q элементов.
4. Пусть K  H  K вложенные конечные поля. K =q, K = q n.Найти
порядок поля H.
Если K1 и K2 промежуточные поля порядков qd1 и qd2 . Доказать, что K1 
K2 = qd, где d = (d1, d2 ).
5. Пусть p – простое число, q = p n. Существуют неприводимые полиномы
всех степеней, пусть g(x) – неприводим полином степени n, что позволит
построить поле K из q элементов, K = Zp[X] /(g(x)). Пусть K - другое поле из
q элементов. Доказать, что g(x) имеет корень в K, так как взятие значения 
в поле K задает гомоморфизм Zp[X]  K, индуцирующий изоморфизм K на
K. Таким образом, любые конечные поля одинакового порядка изоморфны.
6. Пусть K - конечное поле из q элементов и K - расширение K степени n.
Доказать, что отображение : x xq есть автоморфизм K порядка n,
множество неподвижных точек которого совпадает с K. Доказать, что всякий
автоморфизм  поля K, оставляющий на месте элементы K, есть степень .
7. Пусть q=pk. Найти число всех нормированных неприводимых многочленов
над Fp.
8. Пусть K – поле, n – натуральное число.Доказать, что полином xn-1 + xn-2
+…+x+1 - неприводим над K тогда и только тогда, когда n –простое число.
9. Корни из единицы и круговые полиномы. Для натурального числа n поле
разложения полинома xn – 1 над произвольным полем K называется nкруговым полем, обозначается K(n). Корни полинома xn – 1 называются
корнями n-й степени из единицы над K, множество этих корней обозначается
E(n).
Если K поле характеристики p, где p не делит n, то E(n)- циклическая
подгруппа порядка n мультипликативной группы поля K(n). Образующий
элемент группы E(n) называется первообразным корнем n-й степени из
единицы над полем K. Если  - один из них, то все первообразные корни n-й
степени из единицы над K имеют вид s, где 1 s n, (s,n) =1.
Полином Qn(x) = П (x - s) - произведение по всем первообразные корням n-й
степени из единицы над K, называется n - круговым. deq Qn(x) =  (n), xn –
1= П Qd (x) – по всем d n.
Поле Fq = K(q-1) для любого подполя K.
a) Пусть K произвольное поле. Доказать, что круговое поле K(d) является
подполем поля K(n) для каждого d n.
b) Используя формулу обращения Мебиуса, вычислить n-круговой полином
Qn(x).
c) Используя формулу обращения Мебиуса, найти произведение всех
нормированных неприводимых многочленов из кольца Fq[x].
d) Доказать мультипликативность функции Мебиуса (n).
e) Найти каноническое представление поля Fq для q= 25 и порождающего
многочлена g(x)=x5+ x2+1.
Раздел 5. Основные целочисленные алгоритмы в кольце целых
чисел, кольцах вычетов и конечных полях
1. Использование модульной арифметики
Алгоритм Шенхаге: Если M = m1m2 … mk, где m1, m2, …,mk взаимно
простые числа (по b разрядов), 0 u < M и ui  u mod mi , i = 1,…,k. По
числу u вычисляется набор (u1 ,…,uk). Для чего выполняется k делений
kb-разрядного числа u на числа mi , i = 1,…,k, затрачивая O( k M(b)) битовых
операций. Общая сложность алгоритма O( k2 M(b)).
Оценку можно улучшить, если применить технику “разделяй и властвуй”.
Самостоятельная работа: Используя технику “разделяй и властвуй” при k =
2s, выполнить вычисления u(u1 ,…,uk) и, применяя китайскую теорему об
остатках, реализовать обратный переход (u1 ,…,uk) u. Вычислить
сложностную функция. [4], §5.
2. Вычисления с многочленами
Самостоятельная работа: [4], §6.
3. Дискретное преобразование Фурье для кольца целых чисел
Пусть R – коммутативное кольцо с единицей. Элемент  кольца R
называется примитивным корнем n-ой степени из единицы, если:
4.   1;
5. n = 1;
6.   i j = 0, 1 i n.
Если, кроме того, элемент n обратим в кольце R, то задано дискретное
преобразование Фурье, ставящее в соответствие каждому вектору a =
(a0 ,…,an-1), ai R, i =1,…, n-1; вектор F(a) = b = (b0 ,…,bn-1), где bi =  aj  i j,
0  i  n -1.
Обратное дискретное преобразование Фурье определяется как
F-1(b) = c, где координаты вектора c равны ci = n-1  bj - i j, 0  i  n -1.
Кроме того, F(a) есть значение многочлена с коэффициентами a0 ,…,an-1 в
точках i, i = 0,…,n-1, а обратное преобразование Фурье – интерполяции
многочлена по его значениям в этих точках. То, что эти точки образуют
циклическую мультипликативную подгруппу в R, позволяет построить
быстрый алгоритм вычислений значения как прямого, так и обратного
дискретного преобразования Фурье.
Ввиду того, что преобразование Фурье широко применяется, покажем
эффективные методы его реализации:
Пусть n = 2k. Значение многочлена f(x) в точке x =  i совпадает с остатком
от деления f(x) на x-  i , 0  i  n-1. Так как двучлены x- i ,
0  i  n-1 попарно взаимно просты и их произведение равно xn – 1, то
применим использованный в пункте 4 метод “разделяй и властвуй”: xn – 1
= (xn / 2 – 1)( xn / 2 –n / 2). Далее (xn / 2 – 1) = (xn / 4 – 1)( xn / 4 –n / 4), ( xn / 2 –n /
2
) = ( xn / 4 –n / 4) ( xn / 4 – 3n / 4) и т.д., до получения линейных сомножителей
( x – i ). Заметим, что n / 2 = -1, n / 4 = –n / 2n / 4 = -  3n / 4.
Лемма. Пусть f(x) =  aj x i. Тогда остаток от делении f(x) на (xn / 2 – с), где
cR, равен
r(x) =  ( aj + cac+n/2) x i
i=0…n/2-1
Из леммы следует алгоритм вычисления коэффициентов r(x): Разделить
коэффициенты f(x) пополам, затем умножить на c коэффициенты второй
половины и сложить их с коэффициентами первой половины, что требует не
более n арифметических операций кольца R. Выполнение всего алгоритма
происходит не более, чем за n+2n/2+4n/4+… +2kn/2k арифметических
операций кольца, т.е. сложность алгоритма Фурье O(n log n).
Пример быстрого применения преобразования Фурье в кольце целых чисел:
Если коэффициенты f(x) ограничены некоторым числом M, выбираем
n = 2k, тогда примитивный корень  в кольце ZM есть также некоторая
степень 2. Это позволяет эффективно реализовать быстрое преобразование
Фурье, используя двоичное представление чисел.
Теорема. Если n = 2k и  = 2g  1, то при M = n / 2 + 1 элемент n является
обратимым в кольце ZM, а элемент  - примитивным корнем из 1 степени n.
Самостоятельная работа: Вычислить быстрое преобразование Фурье
вектора a = (0,1,2,3,4,5,6,7) в кольце Z / 65537Z при n = 23, k = 3,  = 16 –
примитивный корень степени 8 из 1 по mod 65537.
Раздел 6. Тесты проверки чисел на простоту
§1. Вероятностные тесты проверки чисел на простоту
1.1. Тест Ферма
1.2. Тест Соловэя-Штрассена
1.3. Тест Миллера-Рабина
§2. Детерминированные алгоритмы проверки чисел на простоту
2.1. Проверка чисел Мерсенна
2.2. Проверка с использованием разложения чисел n1
Тест на простоту представляет собой критерий того, что число n
является простым. Если n проходит этот тест, то оно, возможно простое
число. Если оно проходит целый набор тестов на простоту, то весьма
вероятно, что оно действительно является простым. Если n не проходит хотя
бы одного теста на простоту, то оно совершенно определенно является
составным.
Простейшим, но неэффективным способом проверки числа n на простоту
является деление его на числа m в интервале от 2 до n. Другие тесты более
эффективны.
Вероятностные тесты проверки чисел на простоту
(методические указания к лабораторным работам)
1. Тест Ферма
Напомним малую теорему Ферма: Если n - простое число, то для любого b,
взаимно простого с n, bn-1  1 (mod n).
(1.1)
Для не простого n теорема Ферма также может выполняться, хотя это
маловероятно.
Если n – нечетное составное число, b – целое число, (n, b) = 1,
bn-1  1 (mod n), то n называется псевдопростым числом по основанию b.
Т.е. псевдопростое число – это составное число, прошедшее тест Ферма.
Предложение 1. Пусть n – нечетное составное число.
a) Число n псевдопростое по основанию b, для которого (n,b) =1, когда
ord b в группе Zn делит n - 1.
b) Если n не является псевдопростым хотя бы по одному основанию
b Zn, то n не проходит тест Ферма по крайней мере для половины
оснований.
Таким образом, если n проходит тест Ферма не для всех b с (n,b) =1, то
для случайно выбранного b с вероятностью, не меньше 50%, n не пройдет
тест Ферма.
Как проходят тест: Для большого нечетного n выбирается b (случайным
образом) в интервале 0 < b < n. Применяя алгоритм Евклида, находим
d = (n ,b). Если d > 1, то d – не простое число. Если d = 1, возводим b в
степень n -1 методом повторного возведения в квадрат. Если равенство
bn-1  1 (mod n) не выполняется, то n – составное число, если выполняется,
то мы получим некоторую информацию того, что n – простое число.
После чего выбирается другое b и весь процесс повторяется. Если процесс
нарушается для какого-то b, то n – составное.
По предложению 2(b) вероятность того, что составное n пройдет k тестов
Ферма, не превышает 1/2k, если равенство bn-1  1 (mod n) выполняется для
каждого b Zn.
Существуют ли составные n, проходящие тест Ферма для всех b, для
которых (n,b) =1?
Это числа Кармайкла.
Предложение 2. Пусть n – нечетное составное число.
a) Если n делится на квадрат целого числа, большего 1, то n не число
Кармайкла.
b) Если n свободно от квадратов, то n – число Кармайкла т.и т. т, когда
p - 1/n -1 для всякого простого делителя p числа n.
Предложение 3. Число Кармайкла должно быть произведением не менее
трех простых чисел.
2. Тест Соловэя-Штрассена
Критерий Эйлера. Нечетное число n является простым т. и т. т., когда для
любого целого числа a, 1 a n-1, (a,n)=1, выполняется равенство
a (n-1)/2  (a/n) (mod n).
(1.2)

Если n – составное, то не менее 50% всех a Zn не удовлетворяет (1.2).
Определение. Если n –нечетное составное число, a – целое число, (n,a) =1, и
выполняется (1.2), то n называется эйлеровым псевдопростым числом по
основанию a.
Предложение 4. Если n – эйлерово псевдопростое по основанию a, то оно
псевдопростым числом по основанию a.
Тест Соловэя-Штрассена:
Пусть n – нечетное число и надо установить, простое оно или составное.
Выбираем случайным образом k натуральных чисел a, меньших n. Для
каждого из них вычисляем значения обеих частей равенства (1.2).
Вычисление a (n-1)/2 требует O(log3 n) двоичных операций при использовании
метода повторного возведения в квадрат, вычисление символа Якоби также
проводится за O(log3 n) двоичных операций. Если значения не сравнимы по
модулю n, то n – составное число. В противном случае выбираем следующее
b. Вероятность того, что при составном n сравнение (1.2) выполнится для
всех k случайно выбранных b, не превышает 1/2k.Таким образом, тест
Соловэя-Штрассена – вероятностный алгоритм, который выдает результат,
что n-случайное число, либо, что n- вероятно простое.
4. Тест Миллера-Рабина
Тест Миллера-Рабина основан на понятии сильной псевдопростоты.
Предположим, что n – большое нечетное натуральное число и b Zn. Пусть
далее n – псевдопростое по основанию b, т.е. bn-1  1 (mod n). Идея критерия
сильной псевдопростоты в следующем. Пусть n -1 = 2st, t -нечетно. Если
последовательно вычислять b (n-1)/2, b (n-1)/4,…, b t, где t = (n-1)/2s, то при
простом n первым элементом, отличным от 1, должен быть элемент -1, т. к.
при простом n единственными решениями сравнения x2 - 1  0 (mod n)
являются +1 и -1. Практически действия выполняются в обратном
направлении. Полагаем n -1 = 2st, t -нечетно. Вычисляем b t по модулю n.
Если b t  1(mod n), то возводим b t в квадрат по модулю n, получая b 2t (mod
n), затем вновь возводим в квадрат и т.д. до тех пор, пока не получим 1.
Тогда, если n – простое число, предыдущим должно быть -1, в противном
случае мы получаем доказательство того, что n – составное.
Определение. Пусть n – нечетное составное число, n -1 = 2s t, t - нечетно и
b Zn.
Если n и b удовлетворяют одному из условий:
1) b t  1 (mod n);
2) существует такое r, 0  r  s, что b t2 r  -1 (mod n),
(1.3)
то n называется сильно псевдопростым по основанию b.
Предложение 5. Если n сильно псевдопростое по основанию b, то оно
также эйлерово псевдопростое по основанию b. Обратное неверно.
Предложение 6. Если n - нечетное составное число, то n сильно
псевдопростое по основанию b не более чем для 25% чисел b, 0 < b < n.
Тест Миллера-Рабина на простоту: Мы хотим определить, является ли
большое натуральное число простым или составным. Представим n в виде
2s t, где t – нечетно, и выберем случайное целое число b, 0 < b < n. Сначала
вычисляем bt (mod n). Если получаем ±1, то заключаем, что n прошло тест
(1.3) при данном b, в противном случае возводим bt в квадрат по модулю n,
результат вновь возводим в квадрат по модулю n до тех пор, пока не получим
-1. Если это происходит, то n прошло тест. Если же b 2 r +1  1 (mod n), в то
время как b 2 r  -1(mod n), то n не проходит тест, и это доказывает, что n –
составное число. Если мы k раз случайно выбирали разные основания b, и n
каждый раз проходило соответствующий тест, то, согласно предложению 5,
число n имеет не более одного шанса из 4k быть составным. Это лучше, чем в
тесте Соловэя-Штрассена, где аналогичная оценка шансов 1 из 2k.
Полностью полагаться на вероятностный тест не вполне надежно, поэтому
есть и детерминированные тесты, сложность которых хотя и не является
полиномиальной по log, на практике вполне приемлема.
Детерминированные алгоритмы проверки чисел на простоту
1.Проверка чисел Мерсенна
Если число Мерсенна Ms = 2s - 1 – простое, то Ms – простое число
Мерсенна.
Критерий простоты Люка-Лемера: Число Мерсенна Ms ( s  3-нечетное
число) – простое т.и т. т., когда 1) s – простое число; 2) L s -2  0 (mod Ms)
где Ls = 4, L k+1 = Lk2 – 2(mod Ms) при k 0.
Алгоритм Люка-Лемера:
Вход: Число Мерсенна Ms = 2s-1, s3.
Выход: “Число Ms простое” или “Число Ms составное”.
1. Методом пробного деления проверить, есть ли у числа s делители от 2 до
[s]. Если есть, то результат: “Число Ms составное”.
2. Положить L = 4.
3. Для k =1,2,…, s-2 вычислить L L2 – 2 (mod Ms).
4. При L = 0 результат: “Число Ms простое”. В противном случае результат
“Число Ms составное”.
В настоящее время доказана простота числа Мерсенна с числом разрядов
2098960.
Самостоятельная работа. Проверка чисел Мерсенна на простоту с
использованием разложения числа n+1, а также n-1. [1],5.2.1-5.2.2.
Упражнения
1.a) Найти все оcнования b, для которых 15 – псевдопростое число (не
включать ±1).
b) Показать, что если p и 2p-1- простые числа и n = p(2p-1), то n –
псевдопростое для 50% возможных оснований b, а именно для тех b,
которые являются квадратичными вычетами по модулю 2p-1.
2.Пусть n – нечетное составное натуральное число и пусть (b, n)=1.
a) Показать. Что если p –простой делитель n и d = n/p, и n –
псевдопростое по основанию b только при bd-1  1 (mod p).
b) Доказать, что 91– наименьшее псевдопростое число по основанию 3.
с) p – простое число. Показать, что p2 – псевдопростое по основанию b
т.и т.т.,когда bp -1  1 (mod p2).
3.a) Найти наименьшее псевдопростое по основанию 2.
b) Найти наименьшее псевдопростое по основанию 5.
4. Пусть n = pq, где p, q –простые числа.
a) Пусть d = (p-1,q-1). Доказать, что n – псевдопростое по основанию b в
том и только в том случае, когда bd  1 (mod n). Выразить через d число
различных оснований, по которым n- псевдопростое.
b) Сколько имеется оснований, по которым n - псевдопростое, если q =
2p+1? Привести их полный список в терминах p.
c) Пусть n = 341. Какова вероятность того, что случайно выбранное b,
взаимно простое с n, будет основанием, по которому n - псевдопростое
число?
5. Показать, что если n - псевдопростое по основанию b(Z/nZ) , то оно
будет также псевдопростым по основаниям -b и b-1.
6.a) Доказать, если n - псевдопростое по основанию 2, то N = 2n – 1 – также
псевдопростое по тому же основанию.
b) Доказать, если n - псевдопростое по основанию b и (b-1, n) = 1, то целое
число N= (bn-1)(b-1) - псевдопростое по основанию b.
с) Доказать, что существует бесконечно много псевдопростых чисел по
основаниям 2, 3, 5.
d) Привести пример, показывающий, что без условия (b -1, n) = 1 часть
b) неверна.
7. a) Использовать тест Ферма проверки на простоту, чтобы доказать, что
число 2047= 211-1- составное.
b) Объяснить, почему тест Ферма с b=2 нельзя использовать для
проверки на простоту чисел Ферма 2k+1, где k=2n, и чисел Мерсенна 2p -1.
Как обстоит дело с тестом Соловэя-Штрассена по основанию b=2? Как
обстоит дело с тестом Миллера-Рабина по основанию b=2?
8. Пусть m – такое натуральное число, что 6m +1, 12m +1,18m +1 –
простые числа. Положим n = (6m +1)(12m +1)(18m +1). Доказать, что nчисло Кармайкла.
9. Показать, что следующие натуральные числа есть числа Кармайкла:
1105 = 51317, 1729 = 71319, 2465 = 51729, 2821 = 71331, 6601 =
72341, 29341=133761, 172081=7133161, 278545=51729113.
10.a)Найти все числа Кармайкла вида: 5pq и 3pq.
b) Доказать, что для любого фиксированного простого числа r имеется
лишь конечное множество чисел Кармайкла вида rpq (p, q - простые).
11. Доказать, что 561 – наименьшее число Кармайкла.
12. Найти составное число n и основание b, такие, что b(n-1)/2 ±1(mod n),
однако n не эйлерово псевдопростое число по основанию b.
13.a) Доказать, что если n эйлерово псевдопростое число по основанию b,
то оно также эйлерово псевдопростое число по основаниям –b, b-1.
b) Доказать, что если n эйлерово псевдопростое число по основаниям b1
и b2, то оно также эйлерово псевдопростое число по основанию b1b2.
14. Показать, что если p и 2p-1- простые числа и n = p(2p-1), то n –
эйлерово псевдопростое для 25% возможных оснований b(Z/nZ).
15. Пусть n = (6m +1)(12m +1)(18m +1).
a) Доказать, что если m – нечетное, то n – эйлерово псевдопростое для
50% возможных оснований b(Z/nZ).
b) Доказать, что если m – четное, то n – эйлерово псевдопростое для
25% возможных оснований b(Z/nZ).
16. Оценить число двоичных операций в ситуации, когда тест МиллераРабина применяется столько раз, что вероятность прохождения составного
числа n через эти тесты меньше 1/m (n и m очень велики).
17. a) Доказать, что если n–псевдопростое по основанию 2, то N =2n-1 сильно псевдопростое и эйлерово псевдопростое по основанию 2.
b) Доказать, что существует бесконечно много сильно псевдопростых и
эйлеровых псевдопростых по основанию 2.
18. Доказать, что если n - сильно псевдопростое по основанию b, то оно
сильно псевдопростое также по основанию bk для любого целого k.
19. Пусть n –число Кармайкла 561.
a) Найти число оснований b(Z/nZ), для которых 561 – эйлерово
псевдопростое.
b) Найти число оснований, для которых 561 – сильно псевдопростое.
Привести их список.
20. Доказать, что если n = p есть степень простого числа, где  > 1, то
n - сильно псевдопростое по основанию b т.и т.т., когда оно псевдопростое
по основанию b.
21.a) Доказать, что если найдется такое b, что n –псевдопростое число по
основанию b, но не является сильно псевдопростым по b, то можно быстро
найти нетривиальный делитель числа n.
b) Объяснить, как можно защититься от этого при выборе n = pq в
криптографической системе RSA.
Раздел 7. Разложение чисел на множители
§1. Разложение чисел на множители
1.2. Метод пробного деления
1.2.  - Метод Полларда
1.3. Факторизация Ферма и факторные базы
1.4. Метод квадратичного решета
1.5. Метод цепных дробей
§2. Приложения в криптографической системе RSA: [1],6.5.
Разложение чисел на множители
1. Метод пробного деления
Если большое нечетное число n не прошло тест на простоту, то это не
значит, что мы знаем его делители. Далее применяются методы
факторизации. Самый медленный из них – последовательное деление на
простые числа, меньшие n, требующий O(n) двоичных операций.
Простейший алгоритм, работающий быстрее,  - метод факторизации
Полларда.
2.  - Метод факторизации Полларда
Первый шаг состоит в выборе отображения кольца Z/nZ в себя, а именно,
простого многочлена с целыми коэффициентами, например, f(x) = x2 +1.
Затем выбираем случайное число x0 и последовательно вычисляем итерации
x1 = f(x0 ), x 2 = f(f(x0 )), x 3 = f(f(f(x0))) и т.д. Таким образом, x j+1 = f(x j), j =
0,1,2,… После этого производится сравнение различных xj с целью найти
два, принадлежащих различным классам вычетов по модулю n, но одному
классу по модулю некоторого делителя числа n. Как только такие числа x j ,
x k найдены, сразу находим собственный делитель числа n, как (x j - x k, n).
Замечание: В  - методе важно выбрать многочлен f(x), отображающий
кольцо Z/nZ в себя нерегулярным, “случайным” образом. Так, вскоре мы
убедимся, что f(x) не должен быть линейным многочленом и не должен
порождать взаимно однозначное отображение. Как долго ждать появления
двух таких итераций, x j , x k, что x j - x k и n имеют нетривиальный общий
делитель. Для этого для фиксированного (но неизвестного нам) делителя r
числа n найдем типичную (в среднем по всем отображениям Z/nZ в себя и по
всем значениям x0) величину первого такого значения k, что x j  x k (mod r)
при некотором j < k. Иными словами, Мы рассматриваем f(x) как
отображение Z/rZ в себя и интересуемся, сколько потребуется итераций до
возникновения первого повторения x j = x k в Z/rZ.
Предложение 1 дает оценку для вероятного времени работы -метода при
условии, что выбранный многочлен ведет себя как случайное отображение
Z/rZ в себя.
Предложение 1. Пусть S - множество из r элементов. Для отображения f
множества S и элемента x0  S полагаем x j+1 = f(x j), j=0,1,2,… . Пусть  положительное вещественное число и пусть l = 1+[2r]. Тогда доля пар
(f, x0), для которых все x0, x1,…, xl - различны (где f пробегает все
отображения из S в S , а x0 пробегает все элементы S), меньше e-.
Более эффективная версия  -метода. Напомним, что -метод состоит в
последовательном вычислении x j+1 = f(x j), j=0,1,2,… и сравнении с ранее
полученными x к, пока не найдется пара x j , x k с (x k - x j , n) = r > 1. Однако с
ростом k вычисление (x k - x j , n) для всех j < k становится очень трудоемким.
Покажем, как надо действовать, чтобы при каждом k вычислять лишь один
НОД. Сначала заметим, что если при некоторых k0 ,j0 для делителя r числа n
выполняется сравнение x k0  xj0 (mod r),то xk  xj (mod r) любой
последующей пары индексов j, k, имеющих ту же разность k – j = k0 – j0 =
m. Чтобы убедиться в этом, достаточно к сравнению xk0  xj0 (mod r)
применить m раз многочлен f.
Опишем работу алгоритма: Последовательно вычисляя xk, на каждом шаге
делаем следующее. Пусть k является (h +1) – разрядным числом в двоичной
системе счисления, т.е. 2h  k  2h+1. Пусть j – наибольшее число из h
двоичных разрядов: j = 2h-1. Сравниваем xk c xj , т.е. вычисляем (xk - xj ,n).
Если в результате получаем нетривиальный делитель числа n, то
останавливаемся, если нет, то переходим к k+1. Преимущество этого метода,
что при каждом k вычисляется лишь один НОД, а недостаток, что алгоритм
может пропустить первый k0, при котором (x k0 - xj0 , n) = r>1 при некотором
j0 < k0 . Однако довольно быстро пара элементов xk, xj, разность которых
имеет нетривиальный общий множитель с n, будет обнаружена. А именно,
пусть j = 2h+1 -1 и k = j +(k0 – j0). Тогда j – максимальное h +1 – разрядное
число, k состоит из h +2 разрядов, при этом (xk - xj ,n) >1. Заметим, что k < 2
h +2
= 42h  4k0.
Предложение 2. Пусть n – нечетное составное целое число и r – его
нетривиальный делитель, не превосходящий n. Пусть пара (f, x0), состоящая
из многочлена f с целыми коэффициентами и начального значения x0
выбрана так, что ведет себя подобно “случайной” паре (f, x0) в смысле
предложения 1. Тогда -метод выявляет делитель r за O(4n log3 n)
двоичных операций с высокой степенью вероятности. Точнее, существует
такая константа C, что для любого вещественного положительного числа 
вероятность того, что -метод не найдет нетривиального делителя числа n за
C (4n log3 n) двоичных операций, меньше e-.
Замечание.Если выбрать  достаточно большим, e- 0,0001, то мы почти
наверное разложим n за 3С4n log3 n двоичных операций.
Упражнения
1. В задачах a)-d) применить -метод с указанными f(x) и x0 для
разложения заданного числа n. В каждом случае сравнивать xk лишь с xj,
для которого j = 2h-1, если k является (h +1) – разрядным двоичным
числом.
a) x2 -1, x0 =2, n = 91.
b) x2 +1, x0 =1, n = 8051.
c) x2 -1, x0 =5, n = 7031.
d) x3+x +1, x0 = 1, n = 2701.
2. Пусть множество S состоит из r элементов, а отображение f в паре
(f, x0) пробегает все биекции S на себя (т.е. f : S S есть взаимно
однозначное соответствие S с самим собой, т.е. никакие два разных
элемента не имеют одинакового образа при отображении f). Как и прежде,
пусть xj+1 = f(xj),
j = 0,1,…Для каждой пары (f, x0) пусть k обозначает первый из таких
индексов, для которого найдется j < k со свойством xj = xk. Доказать, что:
a) k не превосходит r и принимает каждое значение от 1 до r с
вероятностью 1/r.
b) среднее значение для k равно (r +1)/2 (среднее берется по всем парам
(f, x0), где f - биекция).
3. Используя упражнение 5, объяснить, почему в -методе в качестве f(x)
никогда не следует брать линейный многочлен ax +b.
4. Предположим, что -метод используется для разложения числа,
имеющего простой делитель r. В качестве функции для итерации решено
взять
f(x) = x2. (Это плохой выбор, что станет ясно ниже.) Нас интересует первое
значение k, при котором xk = xj (mod r) для некоторого
j < k, т.е. первое значение k, при котором не все x0 ,x1,…,xk различны по
модулю r. Предположим, что в качестве x0 выбран порождающий элемент
группы (Z/rZ). Положим r - 1 = 2st, где t нечетно.
a) Написать сравнение по модулю r -1, эквивалентное соотношению
xk = xl (mod r).
b) Найти первые значения k и l , для которых выполнено условие из a),
выразив ответ в терминах s и двоичного разложения дроби 1/t.
c) Сколь велико должно быть k по сравнению с r? Почему сделанный
выбор функции f(x) является плохим для -метода?
3. Факторизация Ферма и факторные базы
Существует метод факторизации составного числа n, равного произведению
двух целых чисел, близких друг к другу.
Предложение 1. Пусть n - натуральное число. Существует взаимно
однозначное соответствие между факторизацией n = ab, где a  b >0 и
представлениями n в виде t2 – s2, где s и t - неотрицательные целые числа.
Это соответствие дается уравнениями: t = (a+b)/2, s = (a-b)/2, a =t+s, b = t –
s.
Пример 1. n=200819. Имеем [200819] + 1 = 449. Далее: 4492 – 200819 = 782 не есть полный квадрат. Тогда пробуем 4502-200819=1681=4312. Тогда
200819=4502-412=(450+41)(450-41)=491409. Решение получается после проб
чисел t= [n]+1, [n]+2,…
Существует модификация метода факторизации Ферма: t=[kn]+1, [kn]+2,…
пока не получится t, для которого t2 –kn= s2. Тогда (t+s)(t – s)=kn, т.е.t+s
имеет общий делитель с n, который можно найти путем вычисления (t+s, n).
Пример 2. n=141467. t=[3n] +1=652,…, 6552-3141467=682. (655+68, 141467)
= 241. При k=3 пришлось сделать четыре пробы для t, в то время как для
простой факторизации Ферма пришлось бы испробовать 38 значений t.
Факторные базы
Еще одно обобщение факторизации Ферма: n=ab. Если удалось найти
2
t  s2 (mod n) с t  ± s, то можно найти множитель числа n, вычисляя
(t+s, n) или (t - s, n). Т.к. n t2- s2 и не делит ни t+s ни t-s, то (t+s, n) a
т.и т.т., когда b=n/a (t - s, n).
Пример 3. n=4633 и 1182=25=52 (mod 4633). Находим (118+5, 4633)=41,
(118-5, 4633)=113 и 4633=41113.
Факторной базой называется множество B={p1,…,ph}, состоящее из
различных простых чисел, кроме p1 = -1. Квадрат числа b есть B-число, если
наименьший абсолютный вычет b2 (mod n) можно записать как произведение
чисел из B.
Пример 4. Пусть n = 4633 и B={-1,2,3}. Тогда квадраты трех целых чисел 67,68,69 являются B-числами. Действительно, 672=-144 (mod 4633),
682 = -9(mod 4633), 692=128(mod 4633).
Характеристические векторы чисел B-чисел 67, 68,69: (1,0,0), (1,0,0), (0,1,0):
0, если показатель в разложении числа b2(mod n) четное число и 1 - если
нечетное.
Предположим, что сумма характеристических векторов B-чисел есть нулевой
вектор в F2. Тогда произведение наименьших абсолютных вычетов bi2(mod n)
равно произведению четных степеней всех pj ,входящих в B, т.е. если для
каждого i наименьший абсолютный вычет bi2(mod n) - ai= П1jh pj , то
Пai = П1jh pj i  .
Показатель каждого pj в правой части – четное число. Тогда правая часть
равенства есть квадрат числа П1jh pj , где j = 1/2i ij . Таким образом,
ij
ij
j
наименьшие положительные вычеты b= Пibi(mod n) и с=Пj pj (mod n),
полученные совершенно различными способами, имеют квадраты,
сравнимые по модулю n.
Если оказывается, что b  ±c(mod n), то придется выбрать другую
совокупность B-чисел, у которых соответствующие им характеристические
векторы дают в сумме 0. Заметим, что нельзя брать все bi< n/2, иначе
придем к тривиальному сравнению.
При составном n и случайном выборе bi , b  ±c (mod n) не более, чем в
50% случаев. Действительно, b2(mod n) имеет 2r 4 квадратных корней, если
n имеет r2 различных простых множителей, значит, случайный квадратный
корень из b2 лишь с вероятностью. 2/2r 1/2 совпадает с b или – b. А если
b2 c2 (mod n) с b  ± c(mod n), то сразу можно найти нетривиальный
множитель (b+с, n). Таким образом, если мы k раз повторяет описанную
процедуру нахождения b и c для получения пары, дающей нетривиальный
делитель n, то вероятность неудачи в результате этих k попыток не
превосходит 1/2k.
Пример 5. В предыдущих примерах были выбраны числа 67 и 68, им
соответствует характеристический вектор (1,0, 0), и их сумма –
(0,0,0).Поэтому b=6768=-77(mod 463) и c=2 3 степенью -1 в c можно
пренебречь, т.е. c=36.
Так как -77±36(mod n), то делитель n - (-77+36,4633)=41.
Сколько нужно иметь b, чтобы найти сумму характеристических
векторов, равную нулевому вектору? Другими словами – подмножество
линейно зависимых векторов из F2h с нулевой суммой. В худшем случае это
h+1 различных B-чисел, чтобы найти первый пример сравнения
П bi2  (П1jh pj )2 (mod n).
Пример 5 показывает, что линейно зависимые векторы могут появиться и
раньше.
Пример 6. Пусть n=4633. Найти наименьшую факторную базу B, чтобы
квадраты 68,69, 96 были B-числами, и разложить число 4633.
Решение. 682 (mod n), 692 (mod n) являются произведениями чисел -1,2,3. Так
как 962  -50 (mod n), наименьшие абсолютные вычеты всех трех квадратов
можно выразить через элементы факторной базы B={-1,2,3.5}.
Характеристические векторы (1,0,0,0), (0,1,0,0), (1,1,0,0) имеют нулевую
сумму, поэтому b=6869961031 (mod 4633) и c=2435. Находим (1031+240,
4633)41.
Пример 7. Выбирая bi, пробуем числа, близкие к kn для малых k: [kn],
[kn]+1,…(k=1,2,…). Разложим на множители n= 1829,выбирая в качестве bi
[1829k], [1829k]+1,…(k=1,2,…), так что bi2(mod n) = Пj pj есть
произведение чисел, меньших 20.
j
1
2
j
ij
Составим таблицу из ij :
bi
-1 2 3 5 7 11 13
42
43
61
74
85
86
1
1
1
-
2
4
2
-
1
1
1
- - 1 - 1
1 - -
1
1
-
Множество строк, у которых суммы элементов в каждом столбце четные, это
2-я и 6-я строки, но они дают тривиальное сравнение. Строки 1-я, 2-я, 3=я и
5=я дают сравнение (42436185)2(235713)2(mod n), т.е. 145929012(mod n)
и (1459+901, 1829) =59 – делитель числа 1829.
Time (Разложить n) = O(eC log n loglog n).
Упражнения
1. Использовать факторизацию Ферма, чтобы разложить на множители: a) 8633; b) 809009; c) 92296873; d) 88169891; e) 4061.
2. a) Доказать, что обощенная факторизация Ферма не позволяет
найти делитель большого нечетного числа n, если k = 2 или если k – любое
целое делящееся на 2 и не делящееся на 4.
b) Доказать, что если k=4 и если обобщенная факторизация Ферма
работает для некоторого t, то и простая (с k=1) факторизация Ферма работает
столь же хорошо.
3. Использовать обобщенную факторизацию Ферма, чтобы
разложить на множители: a) 68987; b) 29895581; c) 19578079; d) 17018759.
4. Пусть n =2701. Использовать B-числа 522, 532 (mod n), при
подходящей факторной базе B,чтобы разложить 2701. Какие
характеристические векторы соответствуют 52 и 53?
5.a) Какова вероятность того, что k случайно выбранных векторов в
n
F2 линейно независимы при k  n ?
b) Какова вероятность того, что 5 случайно выбранных векторов в
5
F2 образуют базис?
6. Пусть n - r -разрядное двоичное целое число. На какой
множитель умножается каждое из выражений 4n , которое входит во
временную оценку для -метода и crlogr, которое входит во временную
оценку для метода факторных баз, когда возрастает от 50-значного
десятичного числа до 100-значного?
4. Метод квадратичного решета
Метод квадратичного решета для факторизации больших целых чисел
долгое время был самым скоростным, пока не появился метод факторизации
на эллиптических кривых.
Квадратичное решето представляет собой вариант метода факторных баз.
Факторная база строится из простых чисел, начиная с p=2 и всех нечетных
простых чисел p, не превосходящих заданной границы P, выбираемой из
соображений оптимальности. Множество целых чисел S, в котором мы ищем
B-числа, определим как при факторизации Ферма
S={t2 – n : [n] +1  t  [n] + A}, при надлежащей границы A.
Основная идея метода – числа sP делим на каждое pB. “Решето
Эратосфена” можно использовать для составления списка всех простых p <
A.
Алгоритм
1. Выбираем границы P и A порядка elog n loglog n, P < A< P2.
2. Для t = [n] +1, [n] +2,…, [n] +A выписываем в столбец по порядку
целые числа t2 – n.
3. Для каждого нечетного простого числа p  P проверяем условие
(n/p) =1 и, если оно выполняется, удаляем p из факторной базы.
4. Предполагая, что p такое нечетное простое число, что n –квадратичный
вычет по модулю p; решаем уравнение t2  n (mod p) для =1,2,… Берем
значения  в порядке возрастания, пока не окажется, что уравнение не имеет
решений t, сравнимых по модулю p с каким-либо из чисел в области
[n] +1 t [n] +A. Обозначим через  наибольшее из таких чисел, для
которых в указанной области найдется число t со свойством t2  n (mod p).
Пусть t1 и t2 - два решения t2  n (mod p) и t2 = - t1(mod p).Не требуется,
чтобы t1 и t2 принадлежали отрезку [n] +1 t [n] +A.
5. При том же значении p просматриваем список значений t2 - n ,
полученный в пункте 2. В столбце, соответствующем p, ставим 1 против всех
значений t2 - n, для которых t отличается от t1 на некоторое кратное p, после
чего заменяем 1 на 2 для всех таких значений t2 - n, что t отличается от t1 на
кратное p2, затем заменяем 2 на 3 у всех значений t2 - n , для которых t
отличается от t1 на кратное p3, и так далее до p. Затем делаем то же самое с
t2 вместо t1. Наибольшим числом, которое появляется в этом столбце, будет
.
6. Каждый раз, когда в пункте 5 ставим 1 или заменяем 1 на 2, 2 на 3 и
т.д., делим соответствующее число t2 - n на p и сохраняем полученный
результат.
7. В столбце под p = 2 при n 1 (mod 8) просто ставим 1 против t2 – n с
нечетным t и делим соответствующее t2 – n на 2. При n 1(mod 8) решаем
уравнение t2 – n (mod 2) и продолжаем в точности также, как в случае
нечетного p (за исключением того, что при   3 уравнение будет иметь 4
различных решения t1, t2, t3, t4).
8. Когда указанные действия будут проведены для всех простых чисел,
не превосходящих P, отбросим все t2 – n, кроме тех, которые обратились в 1
после деления на все степени p, не превосходящие P. Тогда получится
таблица того же вида, что в примере 6 из факторизации Ферма, в которой
столбец bi будет содержать все такие значения t из интервала [[n] +1, [n]
+A], что t2 – n есть B-число, а остальные столбцы будут соответствовать тем
значениям p  P, для которых n – квадратичный вычет.
9. Оставшаяся часть процедуры в точности совпадает с процедурой из
факторизации Ферма.
Пример. Разложить на множители n=1042387, выбрав границы P=50, A=500.
[n]=1020, факторная база состоит из восьми простых чисел
{2,3,11,17,19,23,43,47}, для которых 1042387 – квадратичный вычет. Так как
n1 (mod 8), то в столбце p =2 стоят лишь 0 и 1, причем 1 проставляется,
когда t нечетно, 1021 t  1520.
Опишем, как образуется столбец для p = 3. Мы хотим найти решение t1=
t1,0+ t1,13+ t1,232+…+ t1, -1 3-1 сравнения t2  1042387(mod 3 ), где t1,j{0,1,2}
(за другое решение можно принять t2 = 3 - t1). Можно взять t1,0 =1. Для
каждого из наших 8 простых чисел первый шаг – решение сравнения t2 
1042387 (mod p) – можно сделать методом проб и ошибок. Затем по модулю
9: (1+
3t1,1)2  1042387  7(mod 9), откуда 6 t1,1  6(mod 9) , т.е. 2 t1,1  2 (mod 3) и
t1,1 =1. Далее по модулю 27: (1+3+9 t1,2)2  1042387  25 (mod 27), т.е. 16+
18 t1,2  25 (mod 27) и 2 t1,2 1 (mod 3), т.к. t1,2 =2. Затем по модулю 81:
(1+3+18+27t1,3)2  1042387  79 (mod 81), откуда следует, что t1,3 =0.
Продолжая действовать так же до 37, мы находим решение для чисел,
записываемых в троичной системе: t1  (210211)3 (mod 37) и t2 
(2012012)3(mod 37). Однако в интервале между 1021 и1520 нет числа t,
сравнимого с t1 или t2 по модулю 37. Таким образом, мы имеем  = 6, и
можно взять t1 =(210211)3 =589 =1318 (mod 36) и t2=36 - t1 = 140 1112 (mod
35) (в интервале [1021, 1520] нет числа t, сравнимого с t2 по модулю 36).
Построим наше решето для p =3. Начиная с 1318, делаем “прыжки” на 3
вниз, пока не достигнем 1021, и такие же “прыжки’ вверх, пока не достигнем
1519; каждый раз ставим 1 в столбец, если делится на 3, и записываем
результат деления. Затем мы делаем то же самое, “прыгая” на 9, изменяя
каждый раз 1 на 2 в столбце под 3, деля еще раз на 3 то, что осталось от t2 - n,
и записывая результат. Проделаем аналогичную процедуру со скачками на
27, 81, 243, 729 (для 729 скачка не существует – мы только изменяем 5 на 6 в
графе, соответствующей 1318, и делим еще раз на 3 то, что осталось от 131821942387). Наконец мы проделываем те же шаги с t2 = 1112 вместо t1 = 1318,
останавливаясь на скачках величины 243.
После прохождения этой процедуры для остальных 6 чисел факторной
базы мы получим таблицу размера 5008 из показателей степеней, в которой
каждая строка соответствует значению t от 1021 до 1520. Теперь мы
отбрасываем все строки, для которых t2 – n не превратилось в 1 при
повторном делении на степени p в процессе формирования таблицы, т.е. мы
берем только строки, для которых t2 – n есть B-число. В рассматриваемом
примере с n=1042387 останется следующая таблица (с прочерками на месте
нулевых показателей степени).
t
t2 – n
2 3 11 17 19 23 43 47
1021
54
1 3 - - 1027
12342
1 1 2 1
1030
18513
- 2 2 1 1061
83334
1 1
- 1 1
1 -
1112
194157
- 5 - 1 1
1129
232254
1 3 1 1 1 1148
275517
- 2 3 - 1 1175
338238
1 2 - 1
1 1 1217
138702
1 1 1 2 1
- 1390
889713
- 2 2 - 1
1
1520
1268013
- 1 1 2
1
Продолжая так же, как мы делали в примере 6 из факторизации Ферма, ищем
теперь соотношения по модулю 2 между строками этой матрицы, т.е.
двигаясь сверху вниз, ищем такие наборы строк, суммы элементов которых в
каждом столбце четные. Первый обнаруживаемый набор такого типа – это
первые три строки, сумма которых – удвоенная строка 1321----. Таким
образом, мы получаем сравнение (102110271030)2  (233 11217 )2 (mod
1042387).
Однако выбранные строки дали лишь тривиальную факторизацию.
Последняя строка равна пятой строке по модулю 2, это дает (11121520)2 
(33172347)2 (mod 1042387), т.е. 6478532  4961792 (mod 1042387), и мы
получили нетривиальный делитель (647853 – 496179, 1042387)= 1487.
Time (Разложить n) = O(e (1+) log n loglog n) для любого  >0.
Space (Разложить n) = O(eC log n loglog n)
Упражнения
1. В приведенном примере найти все линейно зависимые системы строк
матрицы по модулю 2 и показать, что если P= 50 и A  499, то получить
нетривиальную факторизацию числа 1042387 этим методом невозможно.
2. Использовать метод квадратичного решета с P =50 и A =500 для
разложения на множители чисел: a) 1046603; b) 1059691; c) 998771.
Самостоятельная работа. Метод цепных дробей при разложении чисел на
множители: [1], 6.4.1. Применить алгоритм цепных дробей для разложения
на множители следующих чисел: a) 9509; b) 13561; c)25511; d) 17873.
Раздел 7. Разложение чисел на множители
§1. Разложение чисел на множители
1.1. Метод пробного деления
1.2.  - Метод Полларда
1.3. Факторизация Ферма и факторные базы
1.4. Метод квадратичного решета
1.5. Метод цепных дробей
§2. Приложения в криптографической системе RSA: [1],6.5.
Разложение чисел на множители
1. Метод пробного деления
Если большое нечетное число n не прошло тест на простоту, то это не
значит, что мы знаем его делители. Далее применяются методы
факторизации. Самый медленный из них – последовательное деление на
простые числа, меньшие n, требующий O(n) двоичных операций.
Простейший алгоритм, работающий быстрее,  - метод факторизации
Полларда.
2.  - Метод факторизации Полларда
Первый шаг состоит в выборе отображения кольца Z/nZ в себя, а именно,
простого многочлена с целыми коэффициентами, например,
f(x) = x2 +1. Затем выбираем случайное число x0 и последовательно
вычисляем итерации x1 = f(x0 ), x 2 = f(f(x0 )), x 3 = f(f(f(x0))) и т.д. Таким
образом, x j+1 = f(x j), j = 0,1,2,…
После этого производится сравнение различных xj с целью найти два,
принадлежащих различным классам вычетов по модулю n, но одному классу
по модулю некоторого делителя числа n. Как только такие числа x j , x k
найдены, сразу находим собственный делитель числа n, как (x j - x k, n).
Замечание: В  - методе важно выбрать многочлен f(x), отображающий
кольцо Z/nZ в себя нерегулярным, “случайным” образом. Так, вскоре мы
убедимся, что f(x) не должен быть линейным многочленом и не должен
порождать взаимно однозначное отображение. Как долго ждать появления
двух таких итераций, x j , x k, что x j - x k и n имеют нетривиальный общий
делитель. Для этого для фиксированного (но неизвестного нам) делителя r
числа n найдем типичную (в среднем по всем отображениям Z/nZ в себя и по
всем значениям x0) величину первого такого значения k, что x j  x k (mod r)
при некотором j < k. Иными словами, Мы рассматриваем f(x) как
отображение Z/rZ в себя и интересуемся, сколько потребуется итераций до
возникновения первого повторения x j = x k в Z/rZ.
Предложение 1 дает оценку для вероятного времени работы -метода при
условии, что выбранный многочлен ведет себя как случайное отображение
Z/rZ в себя.
Предложение 1. Пусть S - множество из r элементов. Для отображения f
множества S и элемента x0  S полагаем x j+1 = f(x j), j =0,1,2,… . Пусть  положительное вещественное число и пусть l = 1+[2r]. Тогда доля пар
(f, x0), для которых все x0, x1,…, xl - различны (где f пробегает все
отображения из S в S , а x0 пробегает все элементы S), меньше e-.
Более эффективная версия -метода. Напомним, что  - метод состоит в
последовательном вычислении x j+1 = f(x j), j=0,1,2,… и сравнении с
ранее полученными x к, пока не найдется пара x j , x k с (x k - x j , n) = r > 1.
Однако с ростом k вычисление (x k - x j , n) для всех j < k становится
очень трудоемким. Покажем, как надо действовать, чтобы при каждом k
вычислять лишь один НОД. Сначала заметим, что если при некоторых
k0 , j0 для делителя r числа n выполняется сравнение x k0  xj0 (mod r), то
xk  xj (mod r) для любой последующей пары индексов j, k, имеющих ту же
разность k – j = k0 – j0 = m. Чтобы убедиться в этом, достаточно к
сравнению xk0  xj0 (mod r) применить m раз многочлен f.
Опишем работу алгоритма: Последовательно вычисляя xk, на каждом шаге
делаем следующее. Пусть k является (h +1) – разрядным числом в двоичной
системе счисления, т.е. 2h  k  2h+1. Пусть j – наибольшее число из h
двоичных разрядов: j = 2h –1. Сравниваем xk c xj , т.е. вычисляем (xk - xj ,n).
Если в результате получаем нетривиальный делитель числа n, то
останавливаемся, если нет, то переходим к k+1. Преимущество этого метода,
что при каждом k вычисляется лишь один НОД, а недостаток, что алгоритм
может пропустить первый k0, при котором (x k - x j , n) = r >1 при некотором
0
0
j0 < k0
Однако довольно быстро пара элементов xk, xj, разность которых имеет
нетривиальный общий множитель с n, будет обнаружена. А именно, пусть
j = 2h+1 –1 и k = j + (k0 – j0). Тогда j – максимальное h +1 – разрядное число,
k состоит из h+2 разрядов, при этом (xk - xj ,n) > 1.
Заметим, что k < 2 h +2 = 42h  4k0.
Предложение 2. Пусть n – нечетное составное целое число и r – его
нетривиальный делитель, не превосходящий n. Пусть пара (f, x0), состоящая
из многочлена f с целыми коэффициентами и начального значения x0
выбрана так, что ведет себя подобно “случайной” паре (f, x0) в смысле
предложения 1. Тогда -метод выявляет делитель r за O(4n log3 n)
двоичных операций с высокой степенью вероятности. Точнее, существует
такая константа C, что для любого вещественного положительного числа 
вероятность того, что -метод не найдет нетривиального делителя числа n за
С(4n log3 n) двоичных операций, меньше e-.
Замечание.Если выбрать  достаточно большим, e- 0,0001, то мы почти
наверное разложим n за 3С4n log3 n двоичных операций.
Самостоятельная работа. Метод цепных дробей.[1], 6.4.1.
Раздел 8. Факторизация многочленов над конечными полями
§1. Алгоритм Берлекемпа
§2. Метод Кантора-Цассенхауза
1. Метод Берлекэмпа
Пусть u(x)  Zp[x]. По основной теореме арифметики в кольце полиномов
имеем u(x) = [p1(x)] e [p2(x)] e …[ pr(x)] e . Предположим, что u(x) = (v(x))2 w(x),
т.е. u(x) не свободен от квадратов, тогда d(x) = (u(x), u(x)) 1.Если d(x)  u(x),
то дальше разлагаем d(x) и u(x)/d(x). Если d(x) = u(x), тогда u (x)=0 и есть
коэффициент ak  0 полинома u(x), у которого k кратно p. Тогда u(x) = v(xp)
= [v(x)]p и процесс разложения можно продолжить для полинома v(x),
свободного от квадратов. (Как и в случае d(x) = (u(x), u (x)) =1.) Таким
образом, считаем полином u(x) свободным от квадратов, и надо найти его
простые делители pi (x). Идея Берлекэмпа состоит в том, чтобы
1
2
r
воспользоваться китайской теоремой об остатках, которая справедлива для
многочленов так же, как она справедлива для целых чисел. Из этой теоремы
следует, что для любого набора целых чисел (s1 ,…,sr) по модулю p
существует единственный многочлен v(x), такой, что
v(x)  s1 (mod pr(x)),…, v(x)  sr (mod pr(x)),
(6.1)
deg v(x) < deg p1(x)+…+ deg pr(x) = deg u(x).
Многочлен v(x) дает возможность получить множители многочлена u(x), т.к.
при r  2 и s1  s2 можно найти (u(x), v(x) - s1), который делится на p1(x) и не
делится на p2(x).
Из этого замечания ясно, что информацию относительно множителей
u(x) можно извлечь из решения сравнения (6.1). Рассмотрим его подробно:
v(x)p  sjp  sj  v(x) (mod pj (x)), 1  j  r, поэтому
v(x)p  v(x), deg v(x) < deg u(x)
(6.2)
p
x – x  (x-0)(x-1)…(x- (p-1)) (mod p),
(6.3)
следовательно, для любого многочлена v(x) имеем
v(x)p - v(x)  (v(x)-0)(v(x)-1)…(v(x)-(p-1)) (mod p).
(6.4)
Таким образом, если v(x) удовлетворяет соотношению (6.2), то u(x) делит
левую часть соотношения (6.4), и поэтому каждый неприводимый
множитель многочлена u(x) делит один из p взаимно простых множителей
правой части (6.4). Значит, все решения сравнения (6.2) должны
представляться в виде (6.1) с некоторыми s1 ,…,sr (сравнение имеет pr
решений).
Пусть Q - матрица, строками которой являются степени xpk(mod u(x)):
xpk = qk,n-1xn-1+…+ qk,1x+qk,0 (mod u(x))
(6.5)
Q =
 q0,0
 .
 .
 .
 qn-1,0
q0,1 … q0,n-1
.
. 
.
. 
.
. 
qn-1,1
qn-1,n-1
(6.6)
Многочлен v(x) = vn -1 xn -1+…+ v1 x+ v0 - решение сравнения (6.2),
когда (v0,…, vn-1) Q = (v0,…, vn-1).
(6.7)
j
j
pk
p
p
Действительно, v(x) = j vj x = j k vk qk,j x = k vk x = v(x ) = v(x) (mod u(x)).
Алгоритм Берлекэмпа
1. В случае d(x)  1 добиться, чтобы u(x) был свободен от квадратов, т.е.
взять многочлен v(x) из (6.2).
2. Построить матрицу Q из (6.6).
3. Привести к треугольному виду матрицу Q – I, где I – единичная матрица,
размером nn, найти ранг n-r матрицы Q – I и линейно независимые
векторы v[1] ,…, v[r], такие, что v[j] (Q - I) = (0,…,0) для 1 j  r. (В качестве
v[1] всегда можно брать вектор (1,0,…,0)), представляющий тривиальное
решение v[1](x) =1 сравнения (6.2). Алгоритм приведения к треугольному
виду описан ниже. Здесь r равно числу неприводимых множителей
многочлена u(x), так как решения сравнения (6.2) суть pr многочленов,
соответствующих векторам 1v[1] +…+rv[r] при всевозможных выборах
целых чисел 0 1,…, r< p. Поэтому, если k=1, то u(x) неприводим,
алгоритм заканчивает работу.
4. Найти (u (x), v[2] (x) - s) для 0 s<p, где v[2] (x) – многочлен,
представленный вектором v[2] . Поскольку 1< deg (v[2] (x) – s) < deg u (x) и
u (x) = 0  s < p (v(x) – s, u (x))
(6.8)
для всякого v(x), удовлетворяющего (6.2).
Если, применяя v[2] (x), мы не достигнем разложения u (x) на r множителей,
то вычисляем (v[k] (x) – s, w(x)) для k=3,4,… и 0 s<p, до тех пор, пока не
будут найдены все r множителей. (Если мы берем в (6.1) si  sj , то
получаем решение v(x) сравнения (6.2), которое различает pi(x) и pj(x), а
именно: некоторый многочлен v[k] (x) – s будет делиться на pi(x) и не будет
на pj(x), и потому наша процедура в конечном итоге найдет все простые
множители.)
5. Алгоритм останавливается, как только мы найдем все r множителей, где
r = n – rank (Q - I) , n = deg u (x).
Теорема. Алгоритм Берлекэмпа работает корректно и находит полное
разложение u(x) на множители.
Теорема. Число различных неприводимых делителей u(x) равно размерности
нуль-пространства матрицы Q – I.
Алгоритм приведения матрицы к треугольному виду
1. Не делать ничего, если первый член первого столбца матрицы отличен
от нуля, в противном случае поменять местами первый столбец со
столбцом, имеющим ненулевой первый элемент и желательно нуль в
главной диагонали. Если такого столбца нет, ничего не делать.
2. Разделить все члены первого столбца на первый ненулевой элемент.
(Если такого нет, ничего не делать.)
3. Аннулировать первые элементы всех столбцов, кроме первого
вычитанием подходящего кратного первого столбца (по модулю p).
4. Сдвинуть циклически строки вверх, а столбцы влево.
После k-кратного выполнения базисных шагов первые m – k будут содержать
нули в нижних строках и нижняя правая kk – подматрица станет
треугольной.
Пример. В поле F5 привести к треугольному виду (по mod 5) матрицу 77:
4031002 1031002 1000000 2421031 0000034 1000004 2234100
4223100 1223100 1242103 3124422 1223400 0223410 3243443
3324441 2324441 2312442 0010000 4324341 3324341 0010000
0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 3 2 00 0 0 1 0 0 00 0 0 1 0 0 0 0 0 0 0 0 3 1
0000032 0000032 0000032 0000100 0000032 1000002 0000022
0000010 0000010 0000010 0000010 0000010 2000000 0000010
0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 р.
Теорема. Система m уравнений с m неизвестными вида ZL=U, где Uзаданный m-мерный вектор-строка, а U - заданная m  m- матрица. Для
определения Z построим расширенное матричное уравнение
 L0,0 L0,1 … L0,m-1 
 L1,0 L1,1 … L1,m-1 
[ Z0, Z1,…, Zm-1, -1] ……………………… = [0,0,…,0].
 Lm-1,0 Lm-1,1 …Lm-1,m-1
 U0 U1 … Um-1 
Все решения системы могут быть получены следующим образом:
1) С помощью подходящих операций над столбцами расширенной
матрицы L приводим ее к треугольному виду L*. При этом
присоединенная строка U преобразуется в некоторую строку U*.
2) Образуем матрицу L* - I, вычитая 1 из элементов главной диагонали.
3) Каждую координату U* умножаем на соответствующий диагональный
элемент L* - I. Если какое-либо из этих произведений отлично от нуля,
то уравнение ZL = U не имеет решений. Если все m произведений
равны нулю, то Z = U* - одно из решений уравнения ZL = U и все
другие решения получаются путем прибавления к U* произвольной
линейной комбинации ненулевых строк матрицы L* - I.
Пример разложения на простые множители многочлена
u(x) = 1+ x + x2 + x6 + x7 + x8 + x12 над полем F2. Строки матрицы Q – степени
xqi (mod u(x)) для q=2; i=1,2,…,m-1; m=12.
100000000000
001000000000
000010000000
000000100000
000000001000
Q = 000000000010
111000111000
001110001110
111011011011
101010010010
110010011100
001100100111
000000000000
011000000000
001010000000
000100100000
000010001000
Q - I = 000001000010
111000011000
001110011110
111011010011
101010010110
110010011110
001100100110
011000
111110
011 001
R = 010110
011110
001110
Если занумеровать столбцы матрицы Q – I числами от 0 до 11 и прибавить
третий столбец к шестому, первый, второй и четвертый к восьмому, а пятый
к десятому, то верхний правый 88-квадрат матрицы Q – I становится
нулевым. Нижний правый квадрат примет вид R.
Решениями уравнения [z6, z7,…, z11] R = 0 будут [v6 ,v7,…,v11] =
[a,0,0,a,0,a], где a = 0 или a = 1. Первые шесть координат легко находятся из
уравнения v(Q - I) = 0, решения которого имеют вид v =
[b,a,0,a,a,0,a,0,0,a,0,a], где a, bF2. Наконец, применим алгоритм Евклида к
u(x) = 1110001110001 и v(x) - s = s10110100101. Выбирая s независимой
переменной и t = s+1, найдем (u(x), v(x) - s) = 111101 и (u(x), v(x) - t) =
10011101. оба многочлена неприводимы над полем F2 и разложение является
полным:
1+ x + x2 + x6 + x7 + x8 + x12 = (1+ x + x2 + x3 + x5 )( 1+ x3 + x4 + x5 + x7).
Оценим время работы алгоритма Берлекэмпа при разложении на простые
множители по модулю p многочленов n-й степени. Будем считать, что p –
относительно небольшая величина, чтобы все арифметические операции по
модулю p можно было фактически выполнить за некоторый фиксированный
отрезок времени. (Деление по модулю p можно заменить операцией
умножения, если хранить в памяти таблицу обратных.) Вычисления на шаге 1
(алгоритм Евклида) осуществляются за O(n2) операций; шаг 2 требует
O(pn2) единиц; шаг 3 выполняется за O(n3) единиц; шаг 4 требует не более
O(pn3) единиц. Так что разложение на простые множители многочлена n-й
степени по модулю p выполняется алгоритмом Берлекэмпа за O(pn3) шагов,
при условии, что p – небольшое простое число. Этот метод значительно
быстрее любого из известных методов разложения n-значных чисел в p-арной
системе счисления.
Замечание. Аналогично строится алгоритм Берлекэмпа и над конечными
полями порядка q = pm. Сложность его составляет O(n3 + qkn)
арифметических операций. Поэтому для больших q (в частности из-за
перебора sFq на шаге 3 применяется усовершенствованный алгоритм
Берлекэмпа).
Упражнения
1.a) Покажите, что всякий нормированный многочлен над факториальным
кольцом можно однозначно представить в виде u(x) = v(x)2 w(x), где
многочлен w(x) свободен от квадратов, и оба многочлена v(x) и w(x)
нормированы.
b) Сколько нормированных многочленов степени n по модулю p, где p простое число, свободны от квадратов?
2. a) Докажите сравнение (6.3).
b) Докажите соотношение (6.8).
3. Каким образом доказать, что векторы v[1] ,…, v[r], получаемые при
нахождении нуль-пространства, линейно независимы.
4. Как построить таблицу обратных величин по модулю 101, если 2 есть
первообразный корень?
5. Найдите полное разложение по модулю 2, используя алгоритм Берлекэмпа,
многочлена u(x) = x8 + x6 - 3x4 - 3x3 + 8x2 + 2x – 5.
6. Найдите полное разложение того же многочлена по модулю 5.
7. Пусть u(x) – примитивный многочлен с целочисленными коэффициентами,
свободный от квадратов. Докажите, что существует лишь конечное
множество простых чисел p, таких, что многочлен u(x) по модулю p не
свободен от квадратов.
8. Построить алгоритм Берлекэмпа над полем q=pm, где p-простое число.
1. Метод Кантора-Цассенхауза
Лемма 1. Пусть g(x) Zp[x] – нормированный неприводимый многочлен.
Если g(x) xq – x, где q = pd и d - наименьшее такое число, то deg g(x) = d.
Следствие. Для любого f(x) Zp[x], B1(x) = (f(x), xp - x) есть произведение
всех неприводимых делителей f(x) первой степени.
Заменим f(x) на f1(x) = f(x)/B1(x), то B2(x) = (f1(x), xq - x), где q=p2, есть
произведение всех неприводимых делителей f(x) второй степени. И т.д.
Лемма 2. Пусть g(x) Zp[x] нормирован, deg g(x) = d, причем, все
неприводимые делители g(x) имеют одинаковую степень и g(x) не имеет
кратных делителей. Многочлен g(x) неприводим т.и т.т., когда xQ  x (mod
g(x)), где
Q=pd , и для любого простого t d, для q = pd/t , (xq - x , g(x)) =1.
Метод Кантора-Цассенхауза
Допустим, что многочлен f(x) Zp[x] (p – простое число) нормированный, не имеющий кратных неприводимых множителей и все его
неприводимые делители имеют одну и ту же степень d. При доказательстве
будем различать случаи p = 2 и p > 2.
Теорема 1. Если p > 2 , то для любого многочлена T(x) Zp[x]:
f(x) = (f(x), T )( f(x), T q +1)( f(x), T q -1), где q = (pd-1)/2.
Замечание. Можно доказать, что для случайно выбранного многочлена
T(x) Zp[x] такого, что deg T  2d-1, D(x) = ( f(x), Tq -1), q = (pd-1)/2, D(x) нетривиален с вероятностью, близкой к ½. Факторизация методом КантораЦассенхауза как раз состоит в случайном выборе T и вычислении D.
Если deg D(x) = 0 или deg D(x) = f(x), то выбирается другой многочлен T,
или факторизуем D(x) и f(x)/ D(x) тем же способом.
Теорема 2. Если p = 2, U(x) = x + x2 + x4 +…+xq, где q =2d-1. Тогда для
любого многочлена T= T(x) Z2[x] справедливо равенство
f(x) = (f(x), U(T))( f(x), U(T) +1).
Замечание. Как и в случае p > 2, можно доказать, что для случайно
выбранного многочлена T= T(x), deg T 2d -1, D=( f(x), U(T)) будет
нетривиален с вероятностью примерно равной ½. Также можно выбирать
T(x) среди степеней x, x3, x5,…,так что при некотором нечетном 1 j 2d –
1, ( f(x), U(x j )) будет нетривиален с вероятностью, примерно равной ½.
Доказательство. Предположим противное, т.е. что для любого нечетного j,
1 j 2d – 1, либо U(xj ) 0 (mod f(x)), либо U(x j ) 1 (mod f(x)) (по теореме 2).
Также из теоремы 2, U(T 2) = U(T)2  U(T) (mod f(x)). Поэтому для всех j,
1 j 2d – 1, либо U(xj ) 0 (mod f(x)), либо U(xj ) 1 (mod f(x)).
Так как U(T1+T2)= U(T1)+ U(T2), то для любого H(x) Z2[x], deg H(x) 2d – 1,
либо U(H) 0 (mod f(x)), либо U(H) 1 (mod f(x)). Поэтому считаем deg f(x) >d
(если deg f(x) =d, то f(x), как делитель f(x) степени d, неприводим.), то у f(x)
два различных неприводимых делителя степени d. Обозначим их как f1(x) и
f2(x). Пусть  - корень f2(x) в GF(2d) = Z2(). Так как deg U(x)= 2d-1, то
существует  GF(2d) = Z2(), U()  0 и = P() для некоторого P(x)
Z2(),
deg P(x)  d-1. По китайской теореме об остатках существует многочлен
T(x) Z2[x], deg T(x)  2d-1, T(x)  0 (mod f1(x)), T(x)  P(x) (mod f2(x)).
Тогда U(T)  U(0)0 (mod f1(x)) и U(T)  U(P(x))  0 (mod f2(x)), т.к.
U() = U(P())  0.
Что противоречит тому, что U(H) 0 (mod f(x)), либо U(H) 1 (mod f(x)), для
любого H(x) Z2[x], deg H(x) 2d – 1, следовательно, и для T. Полученное
противоречие доказывает, что при некотором нечетном j, 1  j  2d – 1,
многочлен (U(xj ), f(x)) – нетривиален.
3. Разложение многочленов над простым полем Zp для больших p
Для больших p перебор значений sZp и вычисление (u(x), v(x) - s)
в алгоритме Берлекэмпа потребуют много времени. Поэтому вычисляется
Rest(u(x), v(x) - s), являющийся многочленом степени n от переменной s, для
значений которой (u(x), v(x) - s) нетривиален. Корни Rest(u(x), v(x) - s),
лежащие в поле Zp можно вычислить, например, с помощью вероятностного
алгоритма.
Вероятностный алгоритм решения f(x) = 0 в Zp
1 шаг. Вычислить g(x) = (f(x), xp - x), 2deg g(x)p.
2 шаг. Случайным образом выбрать Fp
и вычислить d(x) = ((x+)(p-1)/2 - 1, g(x)).
3 шаг. Если d(x) = 1 или d(x) = g(x), то вернуться на шаг 2.
Если deg d(x) =1, d(x) = x – b, то b – корень f(x);
заменяем g(x) на g(x)/(x-b) и возвращаемся на шаг 2.
Аналогично при deg d(x)= deg g(x)-1 мы находим x - b = g(x)/ d(x);
заменяем g(x) на d(x) и возвращаемся на шаг 2.
Если 2  deg d(x) = deg g(x)-1, то вместо g(x) рассматриваем два его делителя
d(x) и g(x)/ d(x), и к каждому из них применяем 2 и 3 шаги алгоритма.
Теорема 3. Для g(x) Z2[x], 2 deg g(x)<p и g(x) xp – x при случайном
выборе  на шаге 2 с вероятностью, не меньшей, чем ½- ½p, будет
выполнено неравенство 1 deg d(x) = deg g(x).
Упражнения
1. Найти полное разложение многочлена xn – 1 над Fq для взаимно простых
n и q. Какими условиями связаны элементы матрицы Q?
2. Найти полное разложение xn – 1 над Fq для взаимно простых n и q, не
выполняя операции над матрицей Q. Положить g(x) = kK xk , где K –
некоторое множество чисел, замкнутое относительно умножения на q по
модулю n. Тогда каждый из многочленов g(x) имеет некоторый общий
делитель с xn – 1, и может быть найден с помощью алгоритма Евклида.
3. Разложить многочлен xn – x при n = 15, q = 2.
4. Из теории конечных полей известно, что xn-1 = dn Qd (x), где Qd (x) –
круговой полином, корни которого совпадают со всеми элементами поля
порядка d. Получить полное разложение xn-1 через разложение круговых
многочленов.
Разделы 6, 7 и 8 предполагают также выполнение лабораторных работ
При выполнении работы «Проверка чисел на простоту» студенты должны
написать программы, реализующие тесты Ферма, Соловэя — Штрассена и
Миллера — Рабина убедиться в работоспособности алгоритмов (учитывая
вероятностный характер тестирования), исследовать алгоритмы с точки
зрения количества ошибок, допускаемых ими в зависимости от вида
тестируемого числа (распознавание чисел Кармайкла) и от количества
прогонов теста, обработать полученные статистические данные, а также
измерить и сравнить время работы программ. [1], глава 5. Образцы
выполнения лабораторных работ в [1],Приложение 1.
В работу «Разложение чисел на множители» включены вероятностные
методы разложения. Эти методы сравниваются по двум направлениям:
специальные (методы Полларда), эффективность которых существенно
зависит от вида составного числа, и универсальные методы (Факторизации
Ферма и факторных баз, Квадратичного решета, Цепных дробей)[1], глава 6.
Образцы выполнения лабораторных работ приведены в [1],Приложение 1.
Язык программирования СИ++, а также рекомендуется язык Python, имеющий встроенную поддержку «длинной арифметики» и пакеты с реализацией
низкоуровневых криптографических хэш-функций.
5. Образовательные технологии
Рекомендуемые образовательные технологии:
При проведении занятий планируется использование таких активных и
интерактивных форм занятий, как промежуточное тестирование,
перекрестный опрос, мультимедийные презентации.
6. Учебно-методическое обеспечение самостоятельной работы
студентов. Оценочные средства для текущего контроля успеваемости,
промежуточной аттестации по итогам освоения дисциплины.
Самостоятельная работа организуется с помощью лекционного и
раздаточного материала.
Для текущего контроля успеваемости предназначены тесты.
Темы лабораторных работ:
Проверка чисел на простоту
1. Критерий Вильсона
2. Тест на основе малой теоремы Ферма
3. Свойства чисел Кармайкла
4. Тест Соловея-Штрассена
5. Тест Рабина-Миллера
6. Полиномиальный тест распознавания простоты
Самостоятельная работа: [1], глава 3; §11; [2], глава 5
Построение больших простых чисел
1. Критерий Люка
2. Теорема Поклингтона
3. Теорема Диемитко
4. Метод Маурера
5. Метод Михалеску
6. (n+1)-методы
7. Числа Мерсенна
Самостоятельная работа: [1], глава 3; §12
Методы разложения чисел на множители и криптографическая
система RSA
1. Метод Полларда
2. Алгоритм Полларда-Штрассена
3. Факторизация Ферма
4. Алгоритм Диксона
5. Алгоритм Брилхарта-Моррисона
6. Метод квадратичного решета
7. (p-1)-метод факторизации Полларда
8. Безопасность системы RSA и задача разложения на множители.
Самостоятельная работа: [1], глава 3,4; [2], глава 6,7.
Алгоритмы дискретного логарифмирования в конечном поле.
Протокол Диффи-Хеллмана.
1. Алгоритм Гельфонда
2. Алгоритм Полига - Хеллмана
3. Алгоритм Хеллмана – Рейнери
4. Протокол Диффи - Хеллмана
Самостоятельная работа: [2], глава 7
Элементы теории решеток. Ранцевые алгоритмы шифрования с
открытым ключом.
Самостоятельная работа: [2], глава 8
Перечень вопросов для экзамена:
2. Делимость в кольце целых чисел
3. Вычисление наибольшего общего делителя
4. Простые числа
5. Свойства простых чисел
6. Закон распределения простых чисел
7. Свойства отношения сравнимости
8. Решение сравнений
9. Сравнения 1-й степени
10.Китайская теорема об остатках
11.Символы Лежандра и Якоби
12.Сравнения 2-й степени:
13.Случаи простого модуля
14.Случаи составного модуля
15.Определение цепной дроби
16.Подходящие дроби
17.Использование цепных дробей для решения задач
18.Простейшие диофантовы уравнения и сравнения 1-й степени
19.Уравнение Пелля
20.Разложение функций в непрерывные дроби
21.Кольца:
22.Евлидовы.
23.Безу
24.Факториальные
25.Главных идеалов.
26.Мультипликативные группы конечных полей.
27.Различные формы китайской теоремы об остатках.
28.Быстрые алгоритмы для конечных алгебраических структур
29.Арифметические операции над целыми числами и полиномами
30.Алгоритмы арифметики в системе счисления с основанием B.
31.Умножение методом Карацубы-Офмана
32.Умножение в классах вычетов
33.Умножение с помощью быстрого преобразования Фурье
34.Дискретное преобразование Фурье
35.Алгоритм быстрого преобразования Фурье
36.Алгоритм Шенхаге-Штрассена для умножения целых чисел.
37.Модульное умножение:
38.Метод Монтгомери
39.Модульное возведение в степень
40.Целочисленное деление с остатком:
41.Схема Горнера
42.Деление на 2m- c
43.Общий случай
44.Вероятностные тесты проверки чисел на простоту:
45.Тест Ферма
46.Тест Соловэя-Штрассена
47.Тест Миллера-Рабина
48.Генерация простого числа
49.Детерминированные алгоритмы проверки чисел на простоту
50.Проверка чисел Мерсенна
51.Проверка с использованием разложения числа n-1
52.Разложение чисел на множители:
53.Метод пробного деления
54.- Метод Полларда
55.( - 1) – Метод Полларда
56.Метод цепных дробей
57.Приложения в криптографической системе RSA
58.Многочлены с коэффициентами из поля.
59.Конечные поля. Неприводимые многочлены.
60.Факторизация многочленов над конечными полями
61.Алгоритм Берлекемпа
62.Метод Берлекемпа для больших q.
63.Метод Кантора-Цассенхауза
7. Учебно-методическое и информационное обеспечение дисциплины
а) основная литература:
1. Е.Б. Маховенко. Теоретико-числовые методы в криптографии. М.:Издво Гелиос АРВ, 2006.
2 Б.Б. Самсонов, Е.М.Плохов, А.И.Филоненков. Компьютерная
математика. Ростов-на-Дону: Изд-во Феникс, 2002.
3. Д.Э. Кнут. Искусство программирования. Т.2. Третье издание. МоскваСанкт-Петербург-Киев: Изд-во Мир, 2000.
4. А.В. Черемушкин. Лекции по арифметическим алгоритмам в
криптографии. М.: МЦНМО, 2002.
5. Н.Коблиц. Курс теории чисел в криптографии. М.:Научное изд-во
ТВП, 2001.
б) дополнительная литература:
6. А.Ахо, Дж.Хопкрофт, Дж.Ульман. Построение и анализ
вычислительных алгоритмов. Пер.с англ.- М.: Мир,1978.
7. П.Ноден, К.Китте. Алгебраическая алгоритмика. М.: Мир, 1999.
8. О.Н. Василенко. Теоретико-числовые алгоритмы в криптографии.
М.: МЦНМО, 2003.
Download