ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «ВОРОНЕЖСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
ЭЛЕМЕНТЫ ТЕОРИИ ЧИСЕЛ И КРИПТОЗАЩИТА Учебное пособие для вузов Часть 2 Составители: Б. Н. Воронков, А. С. Щеголеватых
Издательско-полиграфический центр Воронежского государственного университета 2008
Утверждено учебно-методическим советом факультета прикладной математики, информатики и механики 11 сентября 2008 г., протокол № 1
Рецензент К.П. Лазарев
Учебное пособие подготовлено на кафедре технической кибернетики и автоматического регулирования факультета прикладной математики, информатики и механики Воронежского государственного университета.
Рекомендуется для студентов 4-го курса дневного отделения и 4-го курса вечернего отделения.
Для специальности 010501 – Прикладная математика и информатика
2
Cодержание Предисловие ...............................................................................................4 1. Простые числа ........................................................................................4 2. Наибольший общий делитель и наименьшее общее кратное ...........5 3. Алгоритм Евклида. ................................................................................8 4. [х] и применения ................................................................................. 16 5. Дополнение.......................................................................................... 22 6. Получение простых чисел.................................................................. 28 7. Аппроксимация функции π(x) ........................................................... 33 8. Решето Эратосфена............................................................................. 34 9. Сравнения ............................................................................................ 36 10. Инверсии по mod m и решения соответствующих сравнений ..... 39 11. Дальнейшие примеры сравнений .................................................... 44 12. Степени .............................................................................................. 48 13. Алгоритм Хэда умножения по mod m............................................. 53 14. Псевдопростые числа ....................................................................... 54 15. Теорема Вильсона ............................................................................. 58 16. Тест Миллера..................................................................................... 59 17. Вероятностное тестирование на простоту ..................................... 63 18. Функция Эйлера................................................................................ 65 19. Теорема Эйлера и понятие порядка ................................................ 70 20. Тесты на простоту............................................................................. 75 21. Криптосистема RSA (Rivest R., Shamir A., Adleman L.) ............... 79 22. Применение уравнения Пелля ......................................................... 82 23. Примитивные корни ......................................................................... 83 Библиография .......................................................................................... 95
3
Предисловие Для современного этапа научно-технического развития характерен стремительный рост потоков передаваемой информации. В связи с этим возникает острая необходимость в совершенствовании традиционных телекоммуникационных систем и создании новых, более совершенных, способных увеличить быстродействие используемых технических устройств, повысить безопасность и обеспечить экономичность самого процесса обмена информацией. Информация превратилась в объект, на защиту которого направлены основные усилия и ресурсы многомиллионной армии математиков, программистов, радиофизиков и инженеров. Методы защиты информации динамически развиваются, усложняются и постепенно оформляются в отдельную отрасль информационно-комммуникационных технологий. Криптографию и защиту сетей в настоящее время следует рассматривать как вполне сформировавшиеся дисциплины, на основе которых могут разрабатываться или уже созданы реальные законченные приложения, обеспечивающие сетевую защиту. Математической основой большинства современных методов защиты информации является алгебраическая теория чисел [1, 2, 4, 7, 9–14]. Поэтому в данном пособии приведены задания, компьютерные упражнения и постановки задач для выполнения курсовых работ, базирующиеся на теории чисел, которые позволяют приобрести навыки, необходимые при проектировании криптографических систем защиты информации [6, 7]. Упражнения, помеченные звездочкой, являются более трудоемкими в сравнении с остальными. 1. Простые числа 1.1. Упражнения 1. Докажите, что 24n+2 + 1= (22n+1 – 2n+1 + 1)( 22n+1 + 2n+1 + 1). Выбирая n = 4, покажите, что оба сомножителя могут быть составными числами. Каким образом представить эту формулу в особом, достаточно курьёзном, случае факторизации выражения x4 + 4 y4 = (x2 – 2 xy + 2 y2)(x2 + 2 xy + 2 y2)? Заметьте, что это доказывает, что все числа вида x4 + 4 являются составными для всех x > 1. 2. Проверьте, что 23n ∓ 1 = (2n ∓ 1)(22n ± 2n + 1). Может ли этот результат использоваться для иного разложения на простые сомножители в применении к случаю 1? 3. Докажите, что 2mn – 1= (2m – 1)(2m(n-1) + 2m(n-2) + ... + 1), а an – 1 = (a – – 1)( an–1 + an–2 + ... + 1). Предполагая, что n ≥ 2, a ≥ 2 и an – 1 – простое число. Докажите, что тогда a = 2. Покажите далее, что n – простое число (например, рассматривая особый случай a = 2m). Простые числа вида 2n – 1, для n простого, называются «простыми числами Мерсенна». 4
4. Существует немало эффектных алгебраических разложений на сомножители, предложенных Е. Лукасом, например, a10 + 1 = (a2 + 1)((a4 + + a3 + 7a2 + 5a + 1)2 – 10a (a3 + 2a2 + 2a + 1)2). Смысл этого выражения заключается в том, что, если 10a является полным квадратом, то вторым сомножителем будет разность двух квадратов и т. д. Докажите эту формулу и приведите несколько примеров, в которых a = 103. 5. Обратите внимание на то, что для любого k ≥ 2 можно найти k – 1 чисел вида k! + 1, k! + 3, . . . , k! + k, являющихся составными. Таким образом, промежутки между последовательными простыми числами могут быть произвольно большими. Например, когда k = 8, числа 40 322, . . . , 40 328 все являются составными. Но они не являются наименьшими семью последовательными составными числами. Найдите эти числа в диапазоне до числа 100. Выберите первые 13 последовательных составных чисел, начиная со 114. 6. Пусть n является нечетным составным числом. Покажите, что (2n + + 1)/3 – число нечетное и составное. 7. Пусть n будет составным числом. Покажите, что (10n – 1)/9 – число составное. Заметим, что полученный результат имеет вид 10n-1+10n-2 + ... + + 101 + 1, т. е. представляет собой целое число! Оно имеет десятичное представление, состоящее из n одних единиц, и называется репунит. Реально не так много простых репунитов известно в случае, если n > 8. Приведенный здесь результат показывает, что для простых репунитов число n должно быть также простым; попробуйте n = 3 и 5, чтобы убедиться, что обратная теорема не верна. 8. Предположим, что а и с – целые числа, большие единицы. Покажите, что разложение (2ab – 1) = (2a – 1)(2c – 1) невозможно. Вывод: если n имеет два различных собственных делителя (собственные делители не равны ±1 и ± n), тогда 2n – 1 не может быть произведением двух простых чисел. [Покажите, что 2n – 1 имеет минимум три собственных делителя; сравните первую формулу из п. 1.1 (3)]. Покажите, что если n = ck для c ≥ 2, k ≥ 3, тогда 2n – 1 не может быть произведением двух простых чисел. Что может это означать для тех n, у которых 2n – 1 представляет собой произведение двух простых сомножителей? 9. Пусть p будет простым числом, а k – нечётным целым числом ≥1, и предположим, что p + 1 = 2t s, где s – нечетное число. Покажите, что есть только число 2t и нет никакого другого числа более высокой степени 2, которое делит pk + 1. [ Подсказка: используйте биномиальную теорему ]. 2. Наибольший общий делитель и наименьшее общее кратное 2.1. Упражнения 1. Покажите, что если (a, b) = 1 и (a, с) = 1, то (a, bс) = 1. 5
Докажите, что если a | n, b | n и (a, с) = 1, то ab | n. [Это может быть сделано прямо из разложения на простые сомножители или записью в виде ra = sb = n с использованием свойства (a, b) = 1, чтобы показать, что a | s ]. Покажите, что если a | b и (b, с) = 1, тогда (a, с) = 1. 2. Докажите, что если a | b , то (a, b) = | a | . 3. Покажите, что если (a, b) = 2 и a | k , b | k, то ab | 2k. Приведите пример, показывающий, что произведение ab может не делить k . 4. Докажите, что если 1 ≤ r ≤ p–1, где p – простое число, то (r!, p) = 1. Покажите при этом, что биномиальный коэффициент ⎛ p⎞ p! p ( p − 1)...( p − r + 1) = ⎜r⎟= r! ⎝ ⎠ r !( p − r )! кратен p . s Предположим, что n не является простым числом, скажем, n = k p , ⎛n⎞
где p – простое число, p не делит k, а также k > 1 или s > 1, тогда ⎜ ⎟ не де⎝p⎠ лится на n, т. е. представляет собой некоторый, отличный от нуля, биномиальный коэффициент, не кратный n. 5. Предположим, что a, b, x, y – ненулевые целые числа и x/a = y/b (эти дроби необязательно должны быть целыми числами!). Пусть h = (a, b) и пусть a = a1h, b = b1 h для целых чисел a1, b1. Докажите, что x = ka1, y = kb1 для некоторого целого k. Используйте известное свойство (или докажите сами), что если a | bс и (a, b) = 1, тогда a | с. [Условие, что (a, b) = 1 нельзя ослабить до «а не является делителем b». Убедитесь в этом при а = 4, b = 2, с = 6]. 6. Пусть a, b, c, d – положительные числа, (a, b) = 1 и (c, d) = 1, так что дроби
a c a c и несократимы. Предположим, что + является целым чисb d b d
лом. Покажите, что b = d. 7. В качестве варианта задания 4 рассмотрите прямоугольник размером a × b (a, b – натуральные числа), разделенный на ab квадратов сеткой линий, параллельных его сторонам, в котором проведена диагональ. Покажите, что диагональ точно проходит через узлы сетки с координатами x = = ka1, y = kb1 для k = 0, h . Докажите, что диагональ пересекает точно a + + b – (a, b) ячеек сетки. 8. Заданы три натуральных числа a, b и с. Покажите, исходя из разложения на простые сомножители в соответствующих степенях, что ((a, b), c) = ((c, a), b). Общее значение этих трех чисел, записываемое как (a, b, c), называется НОД a, b и c. Докажите, что ((a, b), (a, c)) = (a, b, c). 9.* Пусть a, b, c, x, y, z являются натуральными числами. Предположим, что x/a = y/b = z/c. Пусть h = (a, b, c), а a = a1 h, b = b1 h, c = c1 h. Покажите, что (a1, b1, c1) = 1. Используя тот факт, что ((a1, b1), (a1, c1)) = 1 и, учитывая задание 1, доказать, что x = ka1, y = kb1, z = kc1 для целого числа k. 6
10.* Рассмотрите прямоугольный параллелепипед размером a × b × c, разделенный на abc единичных кубиков плоскостями, параллельными граням параллелепипеда, с диагональю, проходящей внутри параллелепипеда. Используйте результаты задания 9*, чтобы показать, что эта диагональ проходит точно через (a, b, c) +1 углов единичных кубиков. Используйте задание 5, чтобы показать, что количество единичных кубиков, которые пересекает диагональ, находится по формуле a + b + c – ((a, b) + ( b, c) + (с, a)) + (a, b, c). [Эта формула может быть обобщена для n-мерных параллелепипедов и представляет собой пример «принципа включения–исключения», который встречается при описании решета Лежандра]. 11. Пусть pi означает i-е простое число (p1 = 2, p2 = 3 и т. д.) и пусть pk < n < pk+12 ( для некоторого k ≥ 1). Через m обозначим произведение первых k простых чисел и пусть m = qn + r, где 0 ≤ r < n (так что r – это остаток от деления m на n). (Например, 7 < 101 < 112 (k = 4) и m = 210 = 2 × 101 + 8). Принимаем, что r ≠ 0. Покажите, что n будет простым числом, если и только если (n, r) =1. [Доказательство того, что, если (n, r) = 1, тогда n – простое число, будет использовано более полно позднее. Достаточно показать, что n не делится на p1, p2, . . ,pk, но если n – составное число, тогда найдется некоторое простое число ≤ n , которое должно быть делителем для n]. 12. Проверьте, что целые числа от 2184 до 2200 включительно обладают тем свойством, что каждое из них имеет общее кратное >1, по крайней мере, еще с одним из остальных чисел. Покажите, что это свойство теряет силу, если список целых чисел продолжить за границы интервала. [Необычайно длинный список для такого размера чисел!]. 2.2. Упражнения 1. Несомненно, если h = (a, b) и l = [a, b], тогда h | l. Наоборот, если h | l , тогда существуют a и b (а именно, a = h и b = l), для которых h = (a, b) и l = [a, b]. Найдем все a и b, для которых (a, b) = 12 и [a, b] = 72. Какая будет основная процедура в этом случае? Будет ли решение единственным? 2. Пусть r и s – целые числа. Покажите, что они могут быть представлены как r = ux, s = vy, где (u, v) = (x, y) = 1 и uv = НОК(r, s), xy = НОД(r, s), определяя x и y следующим образом. Пусть r = p1r1 p2r2 . . . pkrk, s = p1s1 p2s2 . . . pksk , отсюда определим x = p1х1 p2х2 . . . pkхk , y = p1y1 p2y2 . . . pkyk, где
⎧ri , ri < si , ⎧si , ri > si , и yi = ⎨ . xi = ⎨ ≥ ≤ 0 , r s 0 , r s ⎩ ⎩ i i i i
Заметим, что когда ri = si, то можно перенести соответствующую степень pi либо на x, либо на y, при этом сохраняя требуемые свойства. Найдите все возможные решения для u, v, x и y, включая одно, предлагаемое для r = 100 и s = 60 и для r = 700 и s = 300.
7
3. Покажите разложением на простые сомножители, что [[a, b], c] = = [[b, c], a] = [[с, a], b]. Общее значение этих выражений записывается как [a, b, c] и называется НОК a, b и c. В общем случае [a1, a2, . . . , an]. 4. Пусть q1 < q2 < . . . < q8 – восемь нечетных простых чисел и пусть r будет НОК всех чисел qj,…, qi для 1 ≤ i < j ≤ 8. Пусть А = {5, 7, 8, 9}. Покажите, что от деления любого нечетного простого числа на элемент из А можно получить максимум семь различных остатков. (Например, q/7 может иметь остатки 0, 1, . . . , 6, а q/8 может иметь только остатки 1, 3, 5, 7, так как q – нечетное число). Из этого следует, что для каждого m ∈ A, по крайней мере, два из qi должны иметь одинаковые остатки, когда делятся на m, и, следовательно, их разность делится на m. (Это применение известного «принципа голубиного гнезда», здесь голубями будут qi, а голубиными гнездами – остатки). Почему это следует из того, что r делится на 5, 7, 8 и 9 и, следовательно, на 5 · 7 · 8 · 9 = 2520? Проверьте, что восемь простых чисел 11, 17, 23, 29, 41, 53, 59 дают r = 5040. 5. Покажите, что max( i , j , k ) = i + j + k – min( j , k ) – min( k , i ) – – min (i, j) + min(i, j, k) для любых чисел i, j и k. [Заметим, что благодаря симметрии достаточно проверить формулу при i ≤ j ≤ k]. Докажите, что для натуральных чисел a, b и с, верна формула abc( a, b, c) . [ a , b, c ] = (b, c)(c, a )( a, b) 6. Предположим, что (a, b) = 1 и d | ab. Докажите, что существуют единственные числа d′ и d′′, для которых d = d′ d′′, d′ |a, d′′ |b. Автоматически это выполняется, если (d′, d′′) = 1. Докажите обратное утверждение: если d′ | a и d′′ | b, тогда d′ d′′ | ab, так что произведение делителей ab однозначно определяет пару делителей a и b. 3. Алгоритм Евклида 3.1. Теорема. Для любого целого числа k верна формула: (a, b) = (a + kb, b). Доказательство. Простейшим путем для доказательства этого будет показ того, что ряд из общих делителей a + kb и b совпадает с рядом общих делителей a и b, т. е. d | a и d | b ⇔ d | (a + kb) и d | b. Этот факт более или менее быстро следует из определения делителя. Следствием этого является то, что наибольший общий делитель для a и b равен НОД для a + kb и b. 3.2. Упражнения 1. Используйте п. 3.1, чтобы показать, что (6n + 1, 6n – 3) = 1 для любого целого числа n. [Возьмите k = –1]. Покажите также, что (5n + 3, 3n + 2) = 1, конечно, сначала доказав, что (5n + 3, 3n + 2) = (2n + 1, 3n + 2). 8
2. Пусть p будет простым числом и p | n, где p и n – оба нечетные и p < n. Пусть a = (n + 1, p + 1), b = (n – 1, p – 1). Покажите, что (a, b) = 2, (a, p) = 1, (b, p) = 1. Докажите, используя решение задания 3 из упражнения 2.1, что abp | 2(n – p) и, следовательно, что ab < 2n/p. 3. Свойство делимости, или алгоритм деления. Пусть a и b будут целыми числами и b ≠ 0. Тогда существуют единственные q и r (частное и остаток), удовлетворяющие условию a = bq + r, 0 ≤ r < |b|.
Докажите это, используя следующий метод. Рассмотрите множество целых чисел S = {a – bq : q ∈Z}. Ясно, что S содержит неотрицательные целые числа (почему?). Пусть r будет наименьшим целым числом в S, которое больше нуля. Покажите, что r удовлетворяет соотношению 0 ≤ r < |b| (если желаете, рассмотрите случай b > 0). Чтобы доказать, что q и r единственны, предположите, что a = bq + r= bq1+ r1, где 0 ≤ r< |b| и 0 ≤ r1<|b|. Полагая, что r < r1, докажите, что 0 < r1 – r < |b| и, используя это условие и r1 – r = b(q – q1), получите противоречие. Докажите, что если r1 = r, то q1 = q. 3.3. Упражнение на компьютере Используйте программу для нахождения НОД некоторых пар чисел, которую Вы можете также проверить вручную (это является хорошим развлечением при опробовании новой программы!). Испытайте также пары, такие как (666 . . . 6, 777 . . . 7), где используются по k шестерок и семерок, так, чтобы результатом было k единиц. При каком значении k эта программа выдаст неправильный ответ? 3.4. Упражнение на компьютере: случайные пары Вы можете создать случайные пары, используя RANDOMIZE; a := RANDOM (1000) + 1; b := RANDOM (1000) + 1. При этом производятся случайные пары натуральных чисел, заключенных между 1 и 1000. Запустите программу, скажем, 100 раз и выполните вычисления для проверки количественного соотношения пар, которые дают а) НОД = 1; б) НОД = 1 или 2; в) НОД > 10. (Вставьте цикл в программу для обеспечения выполнения этой программы 100 раз, пока не будет получен удовлетворительный результат, так как оператор RANDOMIZE имеет тенденцию зависеть от времени, а программа будет выполнена настолько бы9
стро, что время не скажется на результат. Можно использовать петлю задержки или такой параметр как RANDSEED (i*i). 3.5. Упражнение на компьютере: модификация алгоритма Евклида Рассмотрим две строки: a = bq1 + r2, т. е., r2 = a – bq1, и b = r2 q2 + r3, т. е., r3 = b – r2 q2. Если a заменить на a – bq1 = a – b[a/b], а затем b заменить на b – a q2 = b – a[b/a] (продолжать, пока новое a ≠ 0!), тогда конечными значениями a и b будут r2 и r3, соответственно. Повторяя эту процедуру снова, получим r4 и r5, и т. д. Напишите программу, которая выполнит эти изменения. Добавив цикл в упражнение 3.4 и последнюю модификацию, Вы можете сравнить скорости вычисления НОД случайных пар. Какая программа работает быстрее? 3.6. Проект: взаимно простые пары Рассмотрим «эвристический подход», который предсказывает соотношение между парами чисел, которые должны быть взаимно простыми. Возьмем все числа, большие нуля. «Вероятность» того, что положительное число a делится на h приблизительно равна 1/h в смысле, что из ряда чисел 1, . . . , n точно h, 2h, 3h, . . . , [n/h|h] являются произведениями h, а [n/h]/n будет близким к 1/h. Пусть ph будет вероятностью того, что два положительных случайно выбранных числа имеют НОД = h. Заметим, что (a, b) = h ⇔a/h, b/h являются целыми числами, а (a/h, b/h) = 1. Таким образом, вероятность того, что для двух случайно выбранных чисел НОД = h, составляет ph = (1/h)(1/h)p1. Так как каждая пара положительных чисел должна иметь некоторый НОД ≥ 1, мы получим ∞
∞
∑ p k = 1, т. е., p1 ∑
k =1
h – 2 = 1.
h= 1
Бесконечная сумма ∑ (1 / h) 2, как известно [8], равна π2 /6. Таким образом, вероятность p1 двух случайно выбранных чисел быть взаимно простыми равна приблизительно 6/π2 = 0.6079. Используя этот результат, найдите вероятность того, что два произвольно взятых положительных числа имеют НОД = 1 или 2? Что вы скажите о НОД > 10? Напишите программу, которая использует 1000 случайных пар чисел, и вычислите количество взаимно простых чисел, у которых НОД ≤ 2 и у которых НОД > 10. Сравните результаты с теоретическими предсказаниями. Также используйте все 2500 пар a и b, где 1 ≤ a ≤ ≤ 50 и 1 ≤ b ≤ 50 вместо случайной совокупности пар. 3.7. Упражнение на компьютере Для вычисления НОД, а именно (330, 140), можно выполнить следующие вычисления, начиная с конца и продолжая к началу: 10 = 50 – 40 = 50 – 10
– (140 – 50 · 2) = 50 · 3 – 140 = (330 – 140 · 2) 3 – 140 = 330 · 3 – – 140 · 7. Конечным результатом будет НОД = 10, выраженный в виде as + bt, где реально s = 3, а t = –7. Применяя этот метод к общему алгоритму, получим следующий результат. 3.8. Теорема. Пусть (a, b) = h. Тогда существуют целые числа s и t, такие, что as + bt = h. 3.9. Вывод. (a, b) = 1, если и только если существуют целые числа s и t, такие, что as + bt = 1. 3.10. Упражнения 1. Подтвердите результат, что если a | bc и (a, b) = 1, тогда a | c, записывая as + bt = 1 и умножая на с. 2. Предположим, что (a, b) = 1 и с | (a + b). Покажите, что (c, a) = = (c, b) = 1. 3. Пусть a = bq + r, 0 ≤ r < b, как в основном шаге алгоритма Евклида. Проверьте, что для n > 1 и а > 0, na – 1 = (nb – 1)(nb(q–1)+r + nb(q-2)+r + . . . + nb+r + nr) + nr – 1. Представьте это как A = BQ + R. Почему 0 ≤ R < B ? Докажите, что шаги алгоритма Евклида для (А, В) = (na – 1)(nb – 1) точно следуют алгоритму Евклида для (a, b) c заменой каждого ri на nri – 1. Докажите, в частности, что (na – 1, nb – 1) = n (a, b) – 1. 4. Разделите (an – bn)/(a – b) = an + an-1b + an –2b2 + . . . + bn на a – b и выведите, что ⎛ a n − bn ⎞ , a − b ⎟ = (a − b, nb n−1 ) . ⎜ ⎝ a−b ⎠ Более трудная задача: используйте этот результат, чтобы показать, что тот же самый НОД равняется (a – b, n(a, b)n–1). Одной возможностью является показать, что nbn–1 в вышеприведенном уравнении может быть заменено на nak bn–k для k = 1,2, …, n. Тогда представим h = (a, b), sa + tb = h и покажем, что каждый общий делитель a – b и nbn–1 также делит nhn–1. 5. Пусть s0 > a > 0 будут целыми числами, (s0, a) = 1 и определим sn для n = 1, 2, 3, . . . как sn = a + s n–1(sn-1 – a). Покажите, что sn – a = s0 s1 s2 . . . s n–1(s0 – a) для n ≥ 1. Далее покажите, что если n > m ≥ 0, тогда sn и sm будут взаимно простыми числами. Как особый случай, возьмите s0 = 3, a = 2. Покажите инn дукцией, что sn = 22 + 1 . (Это является n-м числом Ферма, о котором было упомянуто выше). 6. Рассмотрим первый шаг алгоритма Евклида в виде a = bq + r, где мы примем, что a > b > 0, что означает q ≥ 1. Если b ≤ a/2, тогда, конечно, 11
r < a/2. Принимая b > a/2, покажите, что r остается меньше a/2. Почему этот аргумент означает, что если для некоторого i ≥ 0 r i+2 < ri /2, то ri > 0? (Здесь r0 = a, r1 = b). Таким образом, если остатки остаются ненулевыми, мы имеем r3 < r1/2, r5 < r3/2, . . . Докажите, что r2n+1 = 0, если n достаточно большое для обеспечения условия 2n ≥ b. Приведите несколько примеров для оценки влияния этой верхней границы на длину алгоритма по сравнению с действительной длиной. 7. Пусть a и b целые числа, оба не равные нулю. Рассмотрите ряд чисел S = {ax + by: x и y – целые числа}. Пусть h будет наименьшим элементом S, который больше нуля. Записав a = qh + r, 0 ≤ r < h, покажите, что r ∈ S и докажите, что h|b. Покажите также, что любое общее кратное a и b является кратным h и покажите, что h = (a, b). Заметим, что это доказывает снова теорему 3.8, но он не является достаточно полезным путем для действительного нахождения целых чисел s и t при as + bt = (a, b). 8. Используйте результат задания 3 упражнения 3.10, чтобы показать, что, если (a, b) = 1, то (Ra, Rb) = 1, где Ra является десятичным числом (10а – – 1)/9, содержащим a разрядов. Для общего случая покажите, что (Ra, Rb) = R(a, b). 9. Пусть m и n будут взаимно простыми числами и пусть u, v будут натуральными числами и nv – mu = 1. Проверьте, что x = a(am + bm)u, y = = b(am + bm)u, z = (am + bm)v являются решением уравнения xm + ym = zn. [Отсутствие решений при m = n ≥ 3 является знаменитой догадкой, обычно называемой последней теоремой Ферма]. 10. Пусть p и q различные простые числа и пусть n > 1. Почему должp ны n – 1 и nq – 1 оба делить npq – 1? Используйте результат задания 3 упражнения 3.1 и решение задания 6 упражнения 2.2, чтобы показать, (n pq − 1)(n − 1) является целым числом. что N = p (n − 1)(n q − 1) 3.11. Упражнение: линейные диофантовы уравнения Рассмотрим уравнение ax + by = d, (1) где a, b, x и y являются целыми числами, причем, a, b не равны нулю. Отыщем полный ряд x, y решений уравнения (1). Пусть (a, b) = h, a = a1h, b = = b1h, так что (a1, b1) = 1. 1. Покажите, что если h не делит d, тогда выражение (1) не имеет решений вида [h | левая часть уравнения (1)]. 2. Предположим теперь, что h | d, d = d1h; тогда предположим, что справедливо уравнение a1x + b1y = d1. (2) Выберем s, t такими, чтобы a1s + b1t = 1, а x = sd1, y = td1 являлось одним решением. Покажите, что если X, Y будет другим решением, тогда 12
a1(X – x ) = – b1(Y – y) и покажите, что X = x + kb, Y = y – kb для некоторого целого числа k. 3. Найдите основные решения каждого из следующих уравнений 7x + 5y = 17; 6x + 9y = 33; 6x + 12y = 36. 4. Пусть a и b – положительные числа, и a не делит b, b не делит a. Покажите, что целые числа x и y могут быть выбраны таким образом, что ax + by = (a , b), где 1 ≤ x ≤ b – 1 и 1 ≤ y ≤ а – 1. 5. В виде приложения к заданию 4 рассмотрите кусок бумаги шириной 1 м, который поделен на a одинаковых полосок a – 1 красными линиями с одинаковыми промежутками и параллельными между собой (а ≥ 2) и также разделен на (b ≥ 2) равных линий с помощью b – 1 голубых полосок с одинаковыми промежутками и параллельными по отношению к красным линиям. Принимая, что a не делит b и b не делит a, покажите, что минимальным ненулевым расстоянием между красными и голубыми линиями будет (a, b)/ab (м). 6. Теперь рассмотрим уравнение в целых числах ax + by + cz = d, (3) где мы предположили, что (a, b, c) | d, чтобы это уравнение имело какоенибудь решение. Вспоминая, что (a, b, c) = (a, (b, c)) (см. выше задание 8 упражнения 2.1), мы знаем, что существуют x0 и u0, удовлетворяющие уравнению ax0 + (b, c)u0 = d. Известно, что существуют числа y0 и z0, удовлетворяющие уравнению by0 + cz0 = (b, c). Найдем общее решение уравнения by + + cz = k(b, c) для некоторого фиксированного k и, отсюда, получим общее решение выражения (3) для произвольных целых чисел s и t: (b, c) s, ( a , b, c ) as y = uy0 – y0 + c t, ( a , b, c ) (b, c) as z = uz0 – z0 – b t. ( a , b, c ) (b, c)
x = x0 +
7. Найдите решения следующих диофантовых уравнений: 2x + 6y – 8z = 0; 2x + 6y – 8z = 2; 7x – y + 3z = – 2. Найдите все неотрицательные решения уравнения 2x + 5y + 10z = 100; возможные комбинации 2р, 5р и 10р, где р – копейки, дающие в сумме один рубль. (Или, разумеется, подобные комбинации центов (пенсов), которые в сумме дают один доллар (фунт)!). Перед тем, как написать программу для решения диофантовых уравнений, нам необходим надёжный метод нахождения целых чисел s и t, для которых as + bt = (a, b). Это обеспечивается следующим результатом. 3.12. Теорема. Определим целые числа si и ti для i = 0, 1, 2, . . . таким образом: s0 = 1, s1 = 0, t0 = 0, t1 = 1 и для i ≥ 2, si = si-2 – qi–1si–1, ti = ti–2 – qi–1ti–1 . 13
Определим r0 = a, r1 = b. Тогда ri = asi + bti для i ≥ 0, и в особенности, (a, b) = asn + btn. (Вспомните, что в алгоритме Евклида rn является последним ненулевым остатком и есть НОД a и b). 3.13. Компьютерные упражнения 1. В случае, когда (a, b) = 1, пусть программа обеспечивает получение чисел s, t, таких, что as + bt = 1, т. е., as – 1 является кратным b. Такое s называется числом, обратным (инверсией) по модулю b. Примем b > 0. Иногда удобно добавить сомножитель b к s: a(s + mb) + b( t – am) = 1, таким образом, что 0 ≤ s′ = s + mb < b. Другой путь написания этого s′ есть s – b[s/b]. Напишите программу для получения «наименьшей положительной инверсии» s′. Опасайтесь того, что конечное значение s2 может быть отрицательным, и INT отбрасывает дробную часть, то нам потребуются строки такие как q1 := INT(s2/b); IF (q1 > s2/b) THEN q1:= q1 – 1; s2:= s2 – b*q1. Проверьте Вашу программу нахождением обратного числа по модулю, –1 что можно проделать вручную или, используя знание, что 27 ≡ 104 (mod 2807); –1 19 ≡ 104 (mod 1652). 2. Напишите программы для решения уравнений ax + by = d, и ax + + by+cz = d. Используйте программы для решения уравнений, приведенных ранее. 3.14. Проект: ax + by для x и y – неотрицательных. Пусть a > 0, b > 0 и (a, b) = 1. Мы исследуем ряд чисел А = {ax + by: x ≥ 0 и y ≥ 0}. Покажите, что если m ∈A, то ab – a – m ∉ A. Дадим два намёка; первый из них подобен второму, но немного проще. Так как (a, b) = 1, мы можем найти целые числа x, y такие, что ax + by = m ; также для некоторого k ∈ Z, a(x + kb) + + b(x – ka) = m; почему это означает, что мы можем выбрать x таким, что 0 ≤ x ≤ b – 1? Теперь предположим (для противоречия), что m и ab – a – b – – m оба не принадлежат А: тогда существуют целые числа x, y, u, v такие, что ax + by = m , 0 ≤ x ≤ b – 1, y < 0 (или m ∈ A), и au + bv = ab – a – b – m , 0 ≤ u ≤ b – 1, v < 0. Докажите, что a( x + u + 1) + b( y + v + 1) = ab и используйте (a, b) = 1, чтобы доказать y + v + 1 = la, x + u + 1 = (1– l )b для некоторого целого l. Теперь мы совсем недалеко от требуемого противоречия! Докажите, что все числа m > ab – a – b находятся в А и только половина чисел m для 0 ≤ m ≤ ab – a – b находятся в А. Напишите программу для определения (для данных взаимно простых чисел a и b), какие числа m должны принадлежать А. 14
3.15*. Упражнение. Оно основывается на результат (но не программу) п. 3.14, так что примем, что имеются a и b (>0) при (a, b) = 1, тогда все числа m > ab – a – b могут быть представлены в виде ax + by для x ≥ 0 и y ≥ 0. Представьте, что у Вас имеется большое количество прямоугольных плиток размером a × b, где a и b – различные простые числа (следовательно, взаимно простые), и дан прямоугольник m × n, где m и n – оба > ab – a – b. Идея заключается в том, чтобы покрыть всю площадь прямоугольника m × n плитками a × b. Конечно, это потребует ab | mn. Задача выполнима, если ab | mn, тогда покрытие плитками возможно. Заметим, что, так как a и b – простые числа, условие ab | mn даёт исключительно две возможности: a | m и b | n, или a и b оба делят m. Покажите, что в первом случае покрытие плитками возможно (это просто)! Теперь обратимся ко второму случаю, начиная с выбора w, x, y, z (все ≥ 0), таких, что aw + bx = m и ay + bz = n. Конечно, Вам, может быть, больше по душе подумать о более малых значениях m и n: возможно ли покрытие плитками, если ab | mn? Что будет, если a и b не будут простыми числами? 3.16. Проект: число шагов в алгоритме Евклида Существует теорема: для «большинства» пар a, b использование алгоритмa Евклида потребует около (12 ln 2/π2)ln b шагов. Проверьте это, задавая произвольные значения чисел a и b. 3.17. Минимальные представления и алгоритм Евклида (Это доказательство дано Дж. У. Брюсом). Предположим, что a и b являются положительными и взаимно простыми числами, и воспользуемся алгоритмом Евклида для нахождения s и t таких, что as + bt = 1. Конечно, можно и другими способами выбрать s и t; действительно, общим решением будет a(s + rb) + b( t – ra) = 1 для некоторого r. Определим «размер» этой выборки как f (r) = (s + rb)2 + ( t – ra)2. Следуя далее нашей интуиции, мы можем показать, что минимальное значение всегда достигается для r = 0: алгоритм Евклида минимизирует «размер» коэффициентов. В данном случае f (r) = r2(a2+ b2 ) + r(2 sb – 2ta) + ( s2 + t2 ) становится квадратичным по r. Таким образом, минимумом, достижимым для r, будет единственное значение r. 1. Показать, что минимальное значение f (r) достигается при r = 0, почему для этого достаточно доказать, что f(1) ≥ f(0) и f(–1) ≥ f(0)? 2. Покажите, что условия п. 1 выполняются, если и только если |2sb – – 2ta| ≤ a2 + b2. Для этого достаточно показать, что когда используется алгоритм Евклида для нахождения s и t, a ≥ |2t | и b ≥ |2s |. Это достигается по индукции на определённом шаге алгоритма Евклида. 3. На первом шаге выберем ( b > 1), a = bq + 1, так что s = 1, а t = – q. Проверьте результат в этом случае. 15
4. Предположим, что a = bq + r будет на первом шаге; тогда (b, r) = 1 и по индукции, если алгоритм дает bs1 + rt1 = 1, тогда b ≥ |2t1| и r ≥ |2s1|. Докажите, что s = t1 и t = s1 – qt1. А теперь докажите, что для этого требуется b ≥ |2s | и a ≥ |2t |. 4. [x] и применения 4.1. Определение. Для вещественных x величина [x] является наибольшим числом ≤ x. Альтернативными формулировками, которые явно дают тот же результат, будут: 4.2. Функция [x] является единственным целым числом, удовлетворяющим x – 1 < [x] ≤ x. [x] является единственным целым числом, для которого x = [x] + y и 0 ≤ y < 1. 4.3. Упражнения 1. Покажите, что если n – целое число, тогда [x + n] = [x] + n. 2. Покажите, что если n – целое число, тогда [x] ≥ n ⇔ x ≥ n. 3. Покажите, что если x и y – вещественные числа, тогда [x] < [y] ⇔ cуществует n ∈ Z и x < n ≤ y. (Для ⇒, n может быть выбран как [y]). 4. Покажите, что [x + y]= [x]+ [y] + ε, где ε может быть 0 или 1. 5. Покажите, что для всех вещественных чисел x и y [x] + [y] ≤ [x + y]. (Конечно, это распространяется до определённого числа сумм). 6. Пусть x и y будут ≥ 0. Покажите, что [xy] ≥ [x][y]. Сохраняется ли это условие, если x или y < 0 ?
7. Покажите, что для любого действительного x [x] + [x +
1 ] = [2x]. 2
Здесь, вероятно, наиболее просто выделить на два случая, а именно, n≤x
1 1 и n + ≤ x < n + 1 для целого n. 2 2
Покажите, что для любого вещественного x и целого n > 0, ⎡1 ⎤ ⎢⎣ n [ nx ]⎥⎦ = [ x ] .
8. Пусть x ∈ R и пусть P и Q будут целыми числами, а Q > 0. Покажите, что не существует целого числа k, для которого [x] + P < Qk ≤ x + P. ⎡ [ x] + P ⎤ ⎡ x + P ⎤ (Сравните с заданием 3 упражнения 4.3). Докажите, что ⎢ ⎥ = ⎢ Q ⎥. Q ⎣ ⎦ ⎣ ⎦ Как особый случай, отметим, что если a и b – целые числа, а b > 0, тогда
16
⎡a⎤ ⎢b⎥ ⎡ a ⎤ ⎢ ⎥ = ⎢ ⎥. ⎢ b ⎥ ⎣ bb ⎦ ⎣ ⎦
9.* Докажите следующее красивое обобщение задания 8 упражнения 4.3. Предположим, что f – непрерывная, неубывающая функция, обладающая тем свойством, что для всех x из области определения f, если f(x) является целым числом, то x тоже целое. Тогда (принимая f непрерывной на отрезке {y: [x ] ≤ y ≤ x}) получим [f([x])] = [f(x)]. (Подсказка. Пусть n = [x] и предположим, что n < x. Покажите, что [f([n])] ≤ [f(x)], предполагая первоначально обратное, так что [f([n])] + 1 ≤ [f(x)]. Докажите, что f(n) < < [f(x)] ≤ f(x) и используйте свойство непрерывности, чтобы показать, что существует y такой, что n < y ≤ x и f(y) = [f(x)]. Так как y должен быть целым числом (из допущений относительно f), то полученный результат является противоречием). 10. Пусть r и i будут целыми числами, а i > 0. Пусть x = зуйте [x] ≤ x, чтобы показать, что 2[x] – 1 <
r +i . Исполь2i
r +1 , и используйте неравенство i
x – 1 < [x], чтобы показать, что r – 1 ≤ 2[x] + 1. Докажите, что
r +1 r +1 ≤ 2[x] + 1 и 2[x] – 1 < , а отсюда наименьшим нечётным числом ≥ i i r +1 ⎡r + i ⎤ будет 2 ⎢ + 1. При каких условиях вышеприведенным нечетным i ⎣ 2i ⎥⎦ числом будет 1? 11. Пусть x > 0. Покажите, что число нечётных чисел ≥ 1 и ≤ x будет [(x + 1)/2]. 12. Пусть k будет целым числом ≥ 2. Разделите 3k на 2k : 3k = = q × 2k + r, где 0 ≤ r < 2k, так что q = [3k/2k]. Пусть s = q ⋅ 2k – 1, которое < 3k. Предположим, что s представлено в виде суммы k-х степеней (не обязательно разных) положительных целых чисел. Почему в этом случае могут быть только k-е степени 1 или 2? Используйте выражение s = (q –1) × 2k + (2k – 1) ⋅ 1k, чтобы доказать, что s представляет собой сумму (q – 2 + 2k) k-х степеней и не менее. Таким образом, существуют целые числа, которые можно представить в виде суммы [3k/2k] – 2 + 2k k-ых степеней и не менее. Что это даёт для k = 2, 3, 4? [Это связано с проблемой Варинга; см. ниже]. 17
13. Покажите, что для n – положительного числа 2⎞2 1⎞2 ⎛ 7 ⎞2 ⎛ ⎛ 2 ⎜ n + ⎟ < n(n + 1) < ⎜ n + ⎟ , ⎜ n + ⎟ < n(n + 2) < (n + 1) и 5⎠ 2⎠ 10 ⎠ ⎝ ⎝ ⎝ 7 ⎞2 3⎞2 ⎛ ⎛ ⎜ n + ⎟ < (n + 1)(n + 2) < ⎜ n + ⎟ . 10 ⎠ 2⎠ ⎝ ⎝ Докажите, что ⎡⎣ n + n + 1 + n + 2 ⎤⎦ = ⎡⎣ 9n + 8 ⎤⎦ . 14. Пусть n – целое число ≥ 1 и s = ⎡⎣ n ⎤⎦ . Покажите, что s2 ≤ n ≤ s2 + 2s и 2 2 ⎡ n ⎤ ⎧⎪ s − 1, s ≤ n < s + s , . ⎢⎣ s + 1 ⎥⎦ = ⎨ s , 2 2 + ≤ ≤ + s s n s s 2 ⎪⎩
⎧s , s2 ≤ n < s2 + s , ⎡n⎤ ⎪ 2 2 ⎢⎣ s ⎥⎦ = ⎨ s + 1, s + s ≤ n < s + 2 s , ⎪ s + 2, s 2 + s = n . ⎩ В особенности покажите, что [n/s] = s + 2 только в случае, если n + 1 является полным квадратом. 15. Предположим, что i2 ≤ n (i > 0). Докажите, что ⎡ n ⎤ ⎢ ⎥=i. n / i [ ] ⎣ ⎦ (Одним из вариантов доказательства будет начало с представления n = ai + b, где 0 ≤ b < i. В этом случае вы должны показать, что a > b. Полагая a ≤ b, докажите, что i ≥ a + 1, и тогда, используя n < (a + 1)i, выведите противоречие). Далее покажите, что если [n/u] = u и [n/(i + 1)] = v (и продолжая полагать i2 ≤ n), тогда [n/w] = i для всех w c условием
v + 1 ≤ w ≤ u. 4.4. Степень простого числа, делящего n! Пусть n ≥ 2, а p будет простым числом. Мы желаем найти точную степень p, которая делит n!. Например, если n = 6, тогда n! = = 2 ⋅ 3 ⋅ 4 ⋅ 5 ⋅ 6 = 720 ; для p = 2 ответом будет 4, для p = 3 это будет 2 и для p = = 5 это будет 1, в то время как для другого простого числа ответом будет 0. Заметим, что для p = 2, скажем, множителями среди 2, 3, 4, 5, 6, которые делятся на 2, будут 2, 4, 6. Но мы должны считать 4 большее число раз, так как оно делится на 22, а не только точно на 2. Таким образом, общая степень будет 3 + 1, 3 получается из 2, 4, 6 и одна дополнительная 1 исходит от 4. 18
Общий принцип тот же самый для любых p и n. Так как n! = 2 ⋅ 3 ⋅ 4, . . . , n и p – простое число, попробуем сосчитать, сколько раз p входит в сомножители 2 ⋅ 3 ⋅ 4, . . . , n числа n!. Чтобы проделать это, мы начнём с вычисления числа сомножителей p среди 2 ⋅ 3 ⋅ 4, . . . , n . Затем мы вычислим сомножители вида p2, каждый из которых даёт дополнительный множитель p в n!. Далее мы должны вычислить сомножители p3, каждый из которых даёт сомножитель p в n!, дополнительный к тем, которые уже были перечислены, и т. д. Сомножители положительного числа k среди 2 ⋅ 3 ⋅ 4, . . , n будут k, 2k, 3k ,. . . ,[n/k]k , следовательно, их число равно [n/k]. Таким образом, количество сомножителей вида p будет [n/p], вида p2 – [n/p2] и т. д. Окончательный результат сформулируем следующим образом: Степень простого числа p, которое является делителем n!, есть ⎡n⎤ ⎡ n ⎤ ⎡ n ⎤ ⎢ p ⎥ + ⎢ pp ⎥ + ⎢ ppp ⎥ + ..., где суммирование продолжается до тех пор, пока ⎣ ⎦ ⎣ ⎦ ⎣ ⎦ r
члены не станут равными 0, т. е. до тех пор, пока p > n. Читатель может попробовать доказать следующий эквивалентный вид полученного результата: степень p, делящего n!, есть (n – s)/(p – 1), где s является суммой цифр n, когда оно выражено по основанию p. (Т. е., если n = =
∑
i
t i=0
a i p , где 0 ≤ a i < p для всех i, тогда s =
∑i =0 a i). t
Например, пусть n = 100 и p = 2. Степенью 2, делящей 100!, тогда будет 100 100 100 100 100 100 такое число ⎡⎢ ⎤⎥ + ⎡⎢ ⎤⎥ + ⎡⎢ ⎤⎥ + ⎡⎢ ⎤⎥ + ⎡⎢ ⎤⎥ + ⎡⎢ ⎤⎥ = 50 + 25 + 12 + 6 + 3 + 1 = ⎣ 2 ⎦ ⎣ 4 ⎦ ⎣ 8 ⎦ ⎣ 16 ⎦ ⎣ 32 ⎦ ⎣ 64 ⎦
= 97. Точно так же, если n = 100 и p = 5, тогда степенью 5, делящего 100!, будет ⎡ 100 ⎤
⎡100 ⎤
число ⎢ ⎥ + ⎢ ⎥ = 20 + 4 = 24. Таким образом, 100! = 297 · 524 и ещё надо ум⎣ 5 ⎦ ⎣ 25 ⎦ ножить на другие простые сомножители в соответствующих степенях (включая, конечно, степени числа 3 и т. д.). Отметим, что наибольшей степенью числа 10, на которое делится 100! будет 24; следовательно, в десятичном выражении число 100! содержит 24 нуля, а в двоичном – их было бы 97.
(
4.5. Компьютерные упражнения 1. Напишите (короткую!) программу вычисления чисел по формуле ⎡ n ⎤ + 1 2– n для n = 1, 2, 3 . . . , 100. Теперь объясните, что делает про⎣ ⎦
)
[ ]
грамма. (Подсказка: если (m – 1)2 ≤ n < m2, то, что такое n ?). 2. Напишите программу, которая использует результат п. 4.4 для вычисления степеней простого числа p, которое является делителем n! для заданных p и n. Используйте это также для того, чтобы вычислить степени p, которые будут делителями биномиального коэффициента
19
⎛n⎞ n! . ⎜ ⎟= ⎝ k ⎠ k !(n − k )!
Найдите разложение на простые множители в соответствующей сте⎛1000 ⎞
пени 1000! и ⎜ ⎟. ⎝ 353 ⎠ 4.6. Проект: степенные ряды. Для фиксированного n и заданного простого числа p рассмотрите ряд E(n, p ) наивысших степеней p, которые ⎛n⎞ делят различные биномиальные коэффициенты ⎜ ⎟ для k = 0, 1, . . . , n. На⎝k⎠ пример, для n = 10 cуществуют следующие биномиальные коэффициенты: 2 3 3 2 2 1, 2 ⋅ 5, 3 ⋅ 5, 2 ⋅ 3 5, 2 ⋅ 3 ⋅ 5, 2 ⋅ 3 ⋅ 5 . 7, 2 ⋅ 3 ⋅ 7. Таким образом, E(10, 2) = {0, 1, 2}. Проверьте несколько значений n, скажем, 50; Вы заметили что-либо относительно рядов Е(n, p)? 4.7. Упражнения 1. Почему формула п. 4.4 не даёт правильного ответа, когда p не является простым числом? 2. Найдите число нулей в конце числа 1000! и в конце биномиального ⎛1000 ⎞
коэффициента ⎜ ⎟. ⎝ 353 ⎠ 3. Используя результат п. 4.3, покажите, что наибольшая степень простого числа p, на которое делится (a + b + c)!, больше, чем наивысшая степень числа, на которое делится a! b! c! ( для целых чисел a, b, c ≥ 1). Докажите, что ( a + b + c )! является целым числом. «триномиальный коэффициент» a !b!c ! r 4. Покажите, что если p – простое число, а p – делитель биномиаль⎛n⎞
r
ного коэффициента ⎜ ⎟ , тогда p ≤ n. [Подсказка. Степенью p, делящей би⎝k⎠ номиальный коэффициент, является сумма членов, первым из которых бу⎡ n ⎤ ⎡ k ⎤ ⎡n − k ⎤
дет ⎢ ⎥ − ⎢ ⎥ − ⎢ ⎥ . Используйте задание 4 упражнения 4.3, чтобы пока⎣ p⎦ ⎣ p⎦ ⎣ p ⎦ зать, что это либо 0, либо 1]. 5. Пусть n будет составным числом, n = p1k1 p2k2 . . . prkr, где r ≥ 2. Почему kr каждое простое число в степени pr должно быть одним из чисел 1, 2, . . ., n – 1? Докажите, что это простое число в степени является делителем (n – 1)! и, следовательно, n | (n – 1)!. Пусть теперь n будет составным числом, но r = 1, так что n представляет собой простую степень. Примем, что n > 4. Напишите формулу для степени p, делящей (n – 1)! и покажите, что эта степень ≥ k (достаточно для первого члена суммы п. 4.4 быть ≥ 2, а все остальные члены должны быть ≥ 1). Докажите, что n | ( n – 1)! в этом случае тоже. 20
6. Пусть s будет нечётным, и > 1, 2t < s < 2t+1. Покажите, что s s t + + ... + s/(2 ) < s – 1, 2 4 и докажите, что ⎡s⎤ ⎡s⎤ ⎡s⎤ ⎢⎣ 2 ⎥⎦ + ⎢⎣ 4 ⎥⎦ + ⎢⎣ 8 ⎥⎦ + ... < s − 1, где сумма продолжается до тех пор, пока члены не станут равными нулю. r Пусть теперь n = 2 s, где s – нечётное число и > 1, а r ≥ 1. Покажите, n-1 что степень 2 у делителя n! будет < n – 1. Докажите, что 2 | n!, если и только если n является степенью числа 2. Подобным же образом покажите, что наивысшая степень числа p, на которое делится r!, будет менее r/(p – 1) (более правильно ≤ r – 1). a 7. Предположим, что p – простое число и p | (m–1). Покажите, что a+b p b p | ((m ) – 1) выполняется только для некоторых b ≥ 0. 8. Покажите, что
(2a )!(2b)! всегда будет целым числом. a !b !(a + b)!
9. Пусть n > 1. Почему степень числа 2, на которое делится n!, всегда больше степени числа 5, на которое также делится n!? Докажите, что последний ненулевой десятичный разряд n! (считая слева направо) всегда чётное число. Покажите также, что число нулей в конце (5n)! в n раз больше, чем число нулей в конце числа n!. (Усложнение: записывая f(n) для последней ненулевой десятичной цифры n!, покажите, что f(5n) есть последняя деn сятичная цифра 2 f(n).). 4.8. Проект: функция S(n)
⎡n⎤ Эта функция определяется как S (n) = ∑ ⎢ ⎥ . d =1 ⎣ d ⎦ Напишите программу для вычисления S(n) прямо из её определения и оцените время работы программы для значений числа n, округленно равного 10 000. Пусть теперь s = n и qi = [n/i] для i = 1, 2, . . . , s. Оцените сумму [n/d] для qs ≤ d ≤ n. Оборвав эту сумму до [n/qs] + (те члены, которые находятся в конце [n/qs-1]) + (те члены, которые завершают [n/qs-2]) + и т. д. Поn кажите, что сумма представима как q1 + q2 + ... + qs + − sqs . qs s ⎡n⎤ 2 Докажите, что S(n) = – s + 2∑ d =1 ⎢ ⎥ . (Вы можете воспользоваться ⎣d ⎦ заданиями 10 и 11 упражнения 4.3). Используйте это, чтобы вычислить точk ные значения S(n) для n = 10 , где k = 5, 6, 7, 8. Оцените значение предела n
[ ]
21
S ( n) ⎞ − ln(n) ⎟ . lim n→∞ ⎛⎜
⎝ n
⎠
5*. Дополнение 5.1. Постоянные Капрекара. Пусть b будет положительным целым (основанием) и пусть a будет положительным целым с разложением в виде четырёх цифр в базисе b (например, b = 10, a = 2674), чтобы не все цифры были бы одинаковыми. Определим T(a) = a′ – a′′, где a′ (соответственно, а′′) есть целое число, представленное по основанию b, полученное записью цифр в порядке уменьшения (соответственно, возрастания). (Например, b = 10, a = 2674, a′ = 7642, a′′ = 2467, T(a) = 5175). Для b = 10 покажите, что T(a) = a, если и только если a = 6174. Начните с рассмотрения главного четырёхразрядного числа pqrs (это десятичные цифры), для которых p ≥ q > r ≥ s, и покажите, что вычитание srqp даёт разность, крайние цифры которой дают в сумме 10, а средние цифры дают в сумме 8. Похожий результат получается, когда q = r. Это означает, что возможности для T(a) очень ограничены. Число 6174 называется постоянной Капрекара по основанию 10. Для основания b = 5 найдите единственное a, для которого T(a) = a: оно называется постоянной Капрекара по основанию 5. Покажите, что в обоих случаях для некоторого начального значения a последовательность T(a), T2(a) = = T(T(a)), T3(a) = T(T2(a)), . . . достигает постоянной Капрекара по этому основанию. (Для b = 10 рассмотрите ограниченный ряд чисел, который равен T(a), найденный выше). Напишите программу повторения оператора T для некоторого выбранного b (конечно, ограниченного b ≤ 10) и затем найдите постоянную Капрекара по основанию b, если она существует. 5.2. Простые числа Гильберта. Пусть H = {4k + 1: k = 0, 1, 2, 3, . . .}. Покажите, что H замкнуто для умножения (т. е., если a ∈ H и b ∈ H, тогда ab ∈ H). Целое число h ∈ H называется простым числом Гильберта, если всякий раз, когда h ∈ H для a и b ∈ H, либо a = 1, либо b = 1. Напишите программу нахождения простых чисел Гильберта. Найдите целые числа, которые умножаются в двух разных направлениях как произведения простых чисел Гильберта. 5.3. Ряды Фарея. Напишите программу нахождения дробей Фарея порядка n, т. е., дробей p/q в наименьших членах (т. е., p и q взаимно простые) таких, чтобы знаменатель q ≤ n и (здесь ловушка) дроби были бы упорядочены в возрастающем порядке значений. Существует алгоритм для перехода от дробей Фарея порядка n к дробям порядка n + 1: между каждой 22
последовательной парой, первоначально a/b < c/d, скажем, помещают медианту (a + b)/(b + d), а затем отбрасывают некоторую дробь, для которой b + + d > n + 1. 5.4. Ним Фибоначчи. Напишите программу для представления некоторого числа m в «системе Фибоначчи», т. е., в виде суммы различных и несмежных чисел Фибоначчи. Эти числа (названные в честь Фибоначчи – это вымышленное имя Леонардо из Пизы (1180–1228)) определяются как f 1 = 1, f 2 = 1, fn = fn–1 + fn–2 для n ≥ 3. Таким образом, последовательность начинается таким образом: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, . . . Например, число 54 может быть записано как сумма 34 + 13 + 5 + 2: здесь представлены все числа Фибоначчи и отсутствуют два, входящие в последовательность Фибоначчи fi. Идея заключается в вычитании из m наибольшего fi ≤ m, а затем из m – fi наибольшего fj ≤ m – fi, и т. д. Теперь рассмотрим следующую игру между двумя игроками, которые берут фишки попеременно из одной кучи, состоящей из n фишек. Первый игрок может набрать некоторое количество фишек m1 < n фишек; второй может взять некоторое другое количество фишек m2, где 0 < m2 ≤ 2m1. На выбор игрокам: каждый может, по крайней мере, взять одну фишку и не более двух раз предшествующего крупного «куша». Выигрывает тот, у кого последняя взятка. Стратегия такова. Если число фишек на каком-либо этапе не является числом Фибоначчи, тогда это выражается в виде суммы чисел Фибоначчи, как описано ранее, например, 54 = 34 + 13 + 5 + 2. Другой игрок стремится скорее сбросить, нежели взять, некоторое число малых членов из разложения, обеспечивая им итог меньший, чем половина следующего большего члена. Таким образом, из кучи, состоящей из 54 фишек, этот игрок может взять только 2, а не 2 + 5 = 7, так как 2 × 7 > 13, а другой игрок может взять только 13 и оставить количество фишек, равное числу Фибоначчи, а именно, 34. Напишите программу розыгрыша нима Фибоначчи. 5.5. Обратные палиндромы. Пример: 87 + 78 = 165, 165 + 561 = 726, 726 + 627 = 1353, 1353 + 3531 = 4884. Результат является палиндромом, то есть, читается в обратном порядке так же, как и в прямом. Напишите программу выбора чисел вплоть до, скажем, 999, и повторите вышеприведенные операции, пока число не станет либо палиндромом, либо слишком большим. Многие числа формируют палиндром очень быстро; испытайте 187 как начальное число, как пример, где это не выполняется. Составьте таблицу результатов в виде числа ступеней, взятых для каждого начального числа. (Согласно [7] только 75 из 900 трёхзначных чисел требуют более пяти обращений и все числа < 10 000 произвели палиндром случайно, за исключением 196, с которым даже не произвело ни одного!). 23
Интересно отметить, что двоичные числа не всегда имеют палиндром. Предлагаем для доказательства, что 10110 никогда не даст единицу. Покажите, что после четырёх итераций оно должно стать 10110100, или, скажем, 10120102, где дополнительные цифры указывают число повторяющихся десятичных цифр. Покажите, что четыре последующие итерации дадут 10130103 и т. д. Докажите, что со второй итерации число выборов между 10 . . . 00 и 11 . . . 01, где «. . .» указывает на некоторую последовательность нулей и единиц. 5.6. Перевод вагона с грузом на запасный путь. Эта проблема касается перевода на запасный путь вагонов с грузом при наличии нескольких запасных путей. Мы определим указатель m(σ) последовательности σ целых чисел, таких как 5632413572623 (в общем виде a1, . . . , ar при 1 ≤ ai ≤ n для каждого i, а каждое простое число от 1 до n должно появиться, по крайней мере, один раз). 5.6.1. Начнем, записывая слева направо и сверху вниз в сторону уменьшения все первые и все вторые (если есть таковые) элементы, затем проделывая аналогичные действия со всеми вторыми членами последовательности, уже использованными ранее, всеми третьими (если существуют). располагая их справа от всех этих вторых и т. д. В примере мы получили 122. Надо исключить их из последовательности. 5.6.2. Начиная слева в новой (укороченной) последовательности и записывая ниже все появления наименьших чисел ai, затем всех ai + 1 (если таковые есть) справа от этих ai, потом проделывая сходные операции с членами ai + 1, уже использованными ранее, помещая все ai + 2 справа от полученной последовательности и т. д. В примере получено 233. 5.6.3. Повторяем до тех пор, пока последовательность не будет окончательно сокращена. В примере это даёт 345, затем 566 и, наконец, 7. Тогда m(σ) будет числом этих несокращаемых подпоследовательностей, с которыми вы завершили работу. Связь с постановкой вагонов с грузом на запасной путь описана в [7]. Грубо говоря, это число переводов необходимо, чтобы изменить первоначальный порядок 56324 . . . нумерованных вагонов с грузом в порядок 1222333455667, используя локомотив и номера запасных путей. 5.7. 3N + 1 проблема. Это хорошо известная, но очень трудная процедура. Начиная с некоторого положительного числа N, применим следующую функцию к N: ⎧ 3 N + 1, N = 2n + 1, где n = 0, 1, 2, . . . f (N ) = ⎨ / 2, = 2 . N N n ⎩ Возникает вопрос: может ли последовательность N, f(N), f(f(N)), . . . случайно стать 1 (и, следовательно, пройти через цикл 1, 4, 2, 1, . . . после этого)? Весьма просто написать программу для итерации f; но труднее бу24
дет понять смысл результирующей последовательности чисел для различных начальных значений. Например, начиная с N = 27, последовательность достигает нескольких пиковых значений, наибольшее из которых 9232 получается на 77 итерации перед тем, как она закончится как 1 на 111 итерации. Максимальное значение 9232 также появляется для нескольких других значений N, таких как 54, 73 и 97, которые обладают таким свойством, что их «длины путей» (число итераций для достижения 1) больше, чем для всех меньших начальных значений N. Попытайтесь найти эти значения n (<700). 5.8. Проблема Варинга. Это известная теорема Лагранжа (1736– 1813), где каждое положительное целое число n может быть представлено суммой, cамое большое, четырёх квадратов. Например, числа 7 = 22 + 12 + 12 + 12, 15 = 32 + 22 + 12 + 12 используют для своего представления максимальное число квадратов – 4. Однако существуют числа, требующие для своего представления меньшее число квадратов: 8 = 22 + 22 и 11 = 32 + 12 + 12. (Во многих книгах по теории чисел содержатся ссылки на эту теорему, см. [7]). Для суммы положительных кубов ситуация не так ясна для понимания. Известно, что суммы девяти кубов всегда достаточно и даже семи кубами обходятся для представления всех достаточно больших чисел n (существует догадка, что в действительности достаточно четырёх кубов для представления всех достаточно больших чисел n). Напишите программу определения для всех n ≤ 10 000, скажем, наименьшего требуемого количество кубов, чтобы их сумма составляла бы n. В особенности выберите те числа, для представления которых требуются все девять кубов. Это 23 и 239 (они действительно явяляются единственной парой, для которой доказана необходимость использования 9 кубов), и перечислите такие числа, которые требуют для своего представления восемь и семь кубов. Зададимся целью создать программу разумно эффективную. Организуем массив, скажем, d таким образом: d: array [0. . 10000] of interger; и определим d[0] := 0, d[1] := 1. Число d[j] должно быть (в итоге) наименьшим числом кубов, необходимых для предствления j. Для каждого j = 2, 3, . . . , 10 0000, в свою очередь, значение d[j] начинается при d[j – 1] + 1, что соответствует представлению вида j = 13 + (выражение для j – 1 в виде суммы кубов). Теперь рассмотрим все числа вида t = j – i3 ≥ 0 (где i ≥ 2); если 1 + d[t] < d[j], тогда заменяют d[j] на 1 + d[t]. (Заметим, что d[t] должно всегда быть определено, так как t < j). Объясните, почему необходимо определить d[0] = 0? (Начните, например, с j = 8). Напишите программу, которая реально вычисляет кубы для заданных j. 25
Решение является особым случаем проблемы Варинга (данной Е. Варингом в форме догадки в 1770 г.): для фиксированного k ≥ 2 определить наименьшее число положительных k-тых степеней, необходимых для представления: а) любого целого числа, б) любого достаточно большого целого числа. Для k = 3 ответом на а) будет 9, но ответом на б) может быть и 4, и 5, и 6 и 7. 5.9. Зигзаги Рассмотрим следующую конструкцию (рисунок 1). Сначала нарисуем горизонтальную линию длиной в 100 единиц и, выбрав себе два угла α и β, которые мы принимаем ненулевыми (в градусах), соединим отрезком длиной l ≥ 0. (Это может быть некоторое действительное число, хотя на практике чаще всего выбирают целое число).
3β
3α 2β 2α
β α
Рис. 1. Зигзагообразная линия Последовательно к концу первой линии присоединим другую горизонтальную линию длиной l. Теперь мы начнём делать зигзаг, изображая последовательность линий длиной 100, l, 100, l, 100, l, . . ., углы, отсчитываемые против часовой стрелки между горизонталями и нарисованными линиями, будут α, β, 2α, 2β, 3α, 3β, . . . (см. рис. 1). Мы назовем все линии длиной 100 (включая первую горизонтальную линию) зигами, а линии длиной l загами. Интересной особенностью является то, что зигзаги всегда заканчиваются. Несколько очень красивых конструкций получены разумным выбором l, α и β. Напишите графическую программу вычерчивания зигзагов. Хорошей идеей будет зиги окрашивать в один цвет, а заги – в другой. Попробуйте несколько троек: (100, 90, –40), (100, 62, –60), (100, 19, –20), (40, 26
45, 9), (57, 32, 4), (54, 35, 79), (200, 299, 45), (100, 175, 185). Вы также могли бы получить различные фигуры, такие как шестиугольник, круг (или правильный многоугольник с очень большим числом сторон!) и более сложную – эллипс. Число шагов (один шаг = одному зигу и одному загу), которые необходимы для замыкания зигзага, даётся формулой: 360/(360, α, β); таким образом, если α, β и 360 не имеют общего кратного, тогда число шагов 360. Предлагается следующий способ проверки полученной формулы. Вы включаете вычисление числа шагов в Вашу программу и останавливаете её выполнение после достижения заданного числа шагов. Пусть u и v будут векторами, направленными вдоль первых зига и зага, соответственно (так что они фактически горизонтальны и имеют длины 100 и l, соответственно). Обозначим через ρ вращение по α, а через σ – вращение по β. (Заметим, что вращение векторов хорошо определяется без указания центра вращения). Пусть начальная точка зигзага находится в начале отсчёта. Тогда после k шагов конец последнего зага будет находиться в точке u + v + ρu + σv + ρ2u + σ2v + . . . +ρ k–1u + σ k–1v = = (u + ρu + . . .+ρ k–1u) + (v + σv + . . . + σk–1v). Для того, чтобы оказаться в начале, конечно, достаточно каждую скобку отдельно приравнять нулю. (Действительно, к тому же следующие зиг и заг после возвращения в начало отсчёта будут находиться вдоль первых зига и зага, при этом необходимо, чтобы каждая скобка равнялась нулю). Приравнивая нулю первую скобку и используя оператор ρ, покажите, что u =ρku, откуда следует, что ρk означает единичное вращение (мы принимаем, что u ≠ 0 ). Необходимо, чтобы kα было бы делителем 360; почему в этом случае это эквивалентно тому, что k является делителем 360/(360, α)? Когда обе скобки равны нулю, k должна быть общим кратным этого числа и 360/(360, β). Ценным улучшением программы была бы оценка размера полного зигзага, и тогда можно было бы оценить масштаб, обеспечивающий размещение рисунка на экран монитора. Здесь без доказательства приводится решение для данного случая. Вы можете предложить собственный вариант решения. Чтобы расположить картинку вблизи центра экрана, зададим координаты начальной точки (50, 50 ctg(α/2)) при высоте экрана, составляющей |50 cosec(α/2)| + |(l/2)cosec(β/2)| единиц. (Вспомните, что начальная точка зигзага имеет координаты (0, 0), и первый зиг является горизонталью длиной 100). 5.10. Проект: числа Фибоначчи. Эти числа f1, f2, f3, . . . определены в п. 5.4. Известная теорема [4] утверждает, что fi являются точно положительными значениями полинома 2xy4 + x2 y3 – 2x3 y2 – y5 – x4 y + 2y, где x и y – целые числа ≥ 0. Такие пары (x, y), где x + y = n, скажем, могли быть представлены как (0, n), (1, n – 1), (2, n – 2), . . . , (n, 0). Найдем эти пары для 27
n = 1, 2, 3, . . ., последовательно проверяя с использованием соответствующей программы, где теорема выполняется, скажем, до n = 50. Смогли ли Вы догадаться, что значения x и y, которые производит данная fi, являются значениями полинома? 5.11. Проект: вербальные последовательности. Рассмотрим последовательности вида s1 = 40, s2 = 14/10, s3 = 14/21/10, s4 = 14/12/31/10. Интерпретацией такой последовательности является вербальная: в s1 содержится одна четверка и одна единица; это записано в s2. В s2 содержится одна четверка, две единицы и один нуль; это записано в s3. В s3 содержится одна четверка, одна двойка, три единицы и один нуль; это записывается в s4 и т. д. Проверьте, является ли вышеприведенная последовательность периодической с периодом 2. Напишите программу для вычисления таких последовательностей с некоторого начального члена. Только цифры 0, 1, 2, . . . , 9 используются в процессе вычислений, и Вы можете, если захотите, ограничить последовательности членом, имеющим вид a99/a88/ . . . /a00, где 0 ≤ ai ≤ 9 для любого i (т. е. отказаться от последовательности, которая производит члены, нарушающие это условие). Исследуйте наличие цикла, где sn+k = sn для некоторых n и k (например, k = 1 даёт «неподвижную точку», в которой последовательность остаётся постоянной). 5.12. Проект: использование всех чисел от 1 до 9. Если мы возьмём пятизначное и четырёхзначное числа, у которых все 9 цифр различны и >0, тогда случайно их частное может оказаться целым числом. Например, 13458 98736 = 2; = 68. 6729 1452 Напишите программу для нахождения таких пар чисел (их всего 187!). [Программу расчёта можно сделать достаточно эффективной, имеющей девять вложенных циклов – одну для каждой цифры. Вы, вероятно, хотите использовать массив из 9 элементов, чтобы сохранять траекторию каждого использованного числа. Реальный путь – это распечатать решения в возрастающем порядке чисел, образуемых всеми девятью цифрами]. 6. Получение простых чисел 6.1. Теорема. Пусть n будет составным числом, n > 1. Тогда n имеет сомножитель p, удовлетворяющий условию p ≤ n . Эквивалентно: если
n > 1 не имеет сомножителем p ≤
n , тогда n – простое число.
6.2. Упражнения 1. Какие числа n при разложении на простые множители имеют наименьший простой делитель n равный n ? 28
2. Пусть n – составное число. Покажите, что, если наименьший простой сомножитель p у n больше, чем корень кубический из n, то n/p – простое число. 3. Пусть p – простое число и пусть p = 30 q + r, 0 ≤ r < 30. Покажите, что r равно либо 1, либо является простым числом. (Почему этого достаточно, чтобы доказать, что, пока r ≠ 2, 3 и 5, то r не делится на 2, 3 или 5?). Действительно, 30 является наибольшим числом, для которого это выполняется; можете ли Вы найти другие меньшие числа, для которых это условие также выполняется? 6.3. Компьютерные упражнения. Видоизменим программу для вычисления количества простых чисел, ограниченных заданным максимальным значением, таким образом, что переменная вычислений (целого типа), указывающая на их число, увеличивалась бы каждый раз, как только новое простое число будет найдено. Обозначим через π(x) число простых чисел, меньших x. Используйте программу для проверки следующих результатов: x 1000 2000 3000
π(x) 168 303 430
π(x)
x 4000 5000 6000
550 669 783
x 7000 8000 9000
π(x) 900 1007 1117
Перед началом создания файла простых чисел и написания программы нахождения сомножителей путем простого деления, бегло исследуем промежутки между последовательными простыми числами. (Заметим, что эти промежутки могут быть произвольной длины). Задавая целое число k ≥ 2, мы стремимся найти последовательные простые числа, значения которых различаются на величину, меньшую максимума, заданного индексом k. В особом случае k = 2 эти пары простых чисел называются двойными простыми числами. Примерами двойных простых чисел будут 3, 5; 5, 7; 11, 13; 17, 19. Уже давно стали догадываться, что существует бесконечное множество двойных простых чисел, но это положение не было доказано. Рибенбойм приводит некоторые огромные двойные простые числа, такие как 1040-разрядные простые числа 256 200 945 × 23426 ± 1. Они в определённом смысле далеко превосходят встречавшиеся здесь числа, но их можно исследовать, относясь к размеру этих двойных простых чисел более сдержано, а план относительно их поиска предложен ниже в п. 6.7. Очень просто изменить программу, чтобы распечатать последовательные простые числа, различающиеся на величину k: Вам нужно только проверить выполняется ли условие p(i) – p(i–1) = k для любого i в ряду. Эту же работу крайне трудно сделать в предыдущей программе, так как простые 29
числа не запоминаются после того, как их найдут. Можно предложить временное хранение значения каждого найденного простого числа под именем, подобным oldn, задав ему первоначальное значение 3 в начале программы (объявив oldn и k даже ранее!) и проверяя каждое новое простое число на соответствие n – oldn = k. 6.4. Компьютерное упражнение: промежутки между простыми числами. Используем вышеупомянутую идею приспособления программы к выводу на печать простых чисел, отличающихся от предыдущего на величину k, которую вводит пользователь в программу. Найдите первые два последовательных простых числа, которые отстоят друг от друга на а) 10 единиц, б) 20 единиц. Что произойдёт, когда k = 25? 6.5. Компьютерное упражнение: двойные простые числа. Изменим п. 6.3 так, чтобы использовать только случай k = 2, и вычислим количество двойных простых чисел (начиная с 3, 5), меньших заданного максимального числа. Проверьте, что таких пар 35 для чисел, меньших 1000, и 205 для чисел, меньших 10 000. (Нетрудно догадаться, что двойных простых чисел ≤N, N а для больших N их количество можно найти по формуле α ∫2 (ln x ) –2 dx, где
α ≈ 1,3203236. Если Вы знакомы с квадратурной формулой Симпсона [3], то сможете проверить это предположение).
6.6. Компьютерное упражнение: тройные простые числа. Мы не знаем, можно ли найти три простых числа вида p, p + 2, p + 4, кроме 3, 5, 7 (Почему бы нет?), зато существует множество примеров троек простых чисел вида 6k – 1, 6k + 1, 6k + 5. Приспособим результаты расчетов по п. 6.3 выводить на печать все такие тройки простых чисел, которые меньше заданного максимума. Предполагаем, что существует бесконечное множество таких троек. Другой возможностью является рассмотрение квадруполей простых чисел p, p + 2, p + 6, p + 8. Первыми двумя будут 5, 7, 11, 13 и 11, 13, 17, 19. 6.7. Компьютерное упражнение: наибольшие промежутки между простыми числами. Выбирая максимальное значение max, приспособим программу находить наибольший промежуток между простыми числами, возникающий у последовательных простых чисел, оба из которых ≤max. Теперь нам необходимо сохранить запись максимального промежутка, скажем, maxgap, и возобновлять его каждый раз, когда появляется простое число p, отстоящее от предшествующего простого числа на больший промежуток oldp:
IF p – oldp > maxgap THEN maxgap := p – oldp; 30
Вы должны также сохранять информацию в программе о значениях p и oldp (максимальном промежутке), и по окончании расчетов вывести на печать результаты. Это должна быть наименьшая пара, дающая отмеченный максимальный промежуток. Проверьте, что для max = 1500 максимальный промежуток составляет 34, между 1327 и 1361. Определите максимальный промежуток для max = 1000, max = 10 000. (Посмотрите снова абзац, существующий выше в п. 6.3). 6.8. Компьютерное упражнение. Для каких значений x функция простого числа π(x) (= числу простых чисел ≤ x) равняется 500? Равна 5000? 6.9. Компьютерные упражнения 1. Проверьте, что каждое их чисел n = 29 341, 314 821, 172 081 и 564 651 обладает следующим свойством: n является произведением различных простых чисел p, а p – 1 является делителем числа n – 1 (такие числа называются числами Кармайкла, и мы встретимся с ними ниже). 2. Разложите на множители десятичное число r7, чьё десятичное представление имеет 7 единиц. В случае простых чисел, находящихся в файле, содержащем до 100 000 простых чисел, программа уже не в состоянии факторизовать число r11 (имеющем 11 разрядов), так как один из сомножителей оказывается >105. 3. Разложите на множители числа 10n + 1 для n = 9, 11, 15. (Для n = 11 Вы получите 112 · 23 · 4093 · 8779). Программа, однако, не в состоянии справиться с n = 7, так как простой сомножитель оказывается >105. 4. Разложите на простые сомножители 1010 + 18 и обратите внимание, насколько медленно выполняется программа. 5. Попытайтесь проделать аналогичные действия с числом n = 500 000 002: это число содержит простой делитель > 105, так что не гарантируется достижение полного разложения на множители. 6.10. Компьютерные упражнения 1. Напишите rn для десятичного числа, десятичное разложение которого состоит из n единиц. Используя rn с точностью extended, все числа n = 7, 9, 11, 13, 15 могут быть представлены в виде произведения полностью, используя п. 1.15. Проверьте это: например, r15 = 3 × 31 × 37 × × 41 × × 271 × 2 906 161 содержит только один сомножитель больший 105 и то, что он простой доказывается программой, так как для пробного деления использовались все простые числа, вплоть до корня квадратного из числа. С другой стороны, r17 имеет два больших сомножителя, так что программа не в состоянии представить это число в виде произведения простых чисел (даже используя extended точность для описания чисел). 2. Представьте в виде произведения 10n + 1 полностью для n = 12 и n = 13. (Для n = 12 Вы получите 73 × 137 × 99 990 001). 31
3. Представьте в виде произведения 232 + 1 (пятое число Ферма). 4. Измените программу факторизации целых чисел так, чтобы она ничего не распечатывала бы, если n – составное число, и печатала бы, если n – простое число. (Вам потребуется сохранять первоначальное число n, как, скажем, n0, исключая печать (prime: 0: 0). Найдите первые 100 простых чисел, которые имеют вид k2 + 1 для целого k (наименьшим будет 2 (k = 1), а наибольшим будет 739 601 (k = 860)). 5. Испытайте n = 1010 + 18 и заметьте, насколько быстрее выполняется текущая программа по сравнению с первым вариантом программы факторизации. Испытайте также 500 000 002 снова и заметьте, что полное разложение на простые сомножители достигается, так как последнее содержит простой сомножитель < 1010. 6. Испытайте n = 10 113 949 037. Какое число будет наибольшим, которое можно получить на выходе программы? 6.11. Проект: число простых сомножителей числа n Для некоторого n ≥ 1, функция Ω (n) определяется как общее число простых делителей n (Ω(1) принимается равной нулю). Таким образом, 200 = 23 × 52, отсюда Ω(200) = 3 + 2 = 5. (Существует также функция ω , которая сосчитывает различные простые сомножители n : ω (200) = 2). Приn способим программу для нахождения Ω(n). Пусть f(n) = ∑ k =1 (−1) Ω(k) k –2
Оцените величину f(n) при n → ∞ . 6.12. Проект: 4n + 1 против 4n – 1. Все простые числа, кроме 2, имеют одну из этих двух форм, а вот распределение этих двух типов дает интересные результаты. Проверьте, что 11 593 является первым в последовательности простых чисел вида 4n + 1. Проверьте, что наименьшим N, для которого (число простых чисел ≤ N вида 4n + 1) больше (числа простых чисел ≤ N вида 4n – 1) будет N = 26 861. (Таким образом, простые числа вида 4n – 1 доминируют в списке «малых» простых чисел). Заметим, что существует бесконечное множество чисел как первого, так и второго вида. 6.13. Проект. Можно показать, что существует целое число N ≤ 100 такое, что для всех n ≥ N, по крайней мере, одно из чисел n, n + 1, n + 2, . . . , n + 9 имеет три или более различных простых сомножителей. Напишите программу, воплощающую эту прекрасную догадку для числа n. 6.14. Компьютерное упражнение. Проверьте, что существуют 11 простых чисел между 104 и 104 + 100. Найдите простые числа между 10n и 10n + 100 для n = 5, 6, 7, 8. Проделайте то же самое для простых чисел между 10n и 10n + 1000 (для n = 8 существуют 54 таких простых числа). 32
7. Аппроксимация функции π(x)
Число π(x), которое определено для всех действительных чисел x, является числом простых чисел ≤ x. История теории чисел сопровождалась попытками найти хорошую аппроксимацию функции π(x). В настоящее время известно несколько аппроксимаций π(x), характеризующихся различной точностью. 7.1. π(x) приближённо равна x/ln x. Точное утверждение гласит, что π(x) ln x/x → 1 при x→ ∞. Это было предположением Гаусса (оно несколько отличается от формулы Лежандра), оно было доказано независимо Ж. Адамаром и Ш.Ж. Валле-Пуссэном в 1896 г. Для понимания формулы важным является представление, что для больших х отношение π(x)lnx/x близко к 1. Простые числа редеют в соответствии с логарифмическим законом, но это в среднем: всегда можно найти бесконечно много пар простых чисел, различающихся между собой на две единицы! Используя эту формулу, найдём, что количество простых чисел, заy x . Полагая ключённое между x и y приблизительно равно − ln y ln x y = 104 + 100 и x = 104, получим 9,67; в действительности в этом интервале содержится 11 простых чисел. Эта аппроксимация не такая плохая, как может показаться: 1229 простых чисел, меньших x, и 1240 – меньших y. 7.2. Компьютерное упражнение. Составьте таблицу оценок количества простых чисел в интервалах вида: от 10n до 10n + 10k, где k = 2, 3 или 4, и сравните полученные значения с действительными. Вспомним две другие аппроксимации π(x): логарифмический интеграл и функцию Римана [15]. 7.3. Компьютерное упражнение: логарифмический интеграл. Он определяется как x dt . Li ( x) = ∫ 2 ln t Напишите программу для вычисления этого интеграла по формуле Симпсона. Вторая версия теоремы о простых числах утверждает, что π(x)/Li(x) → 1 при х → ∞. Примените эту формулу к аналогичным примерам п. 7.2 и сравните полученные результаты. [В случае, если Вы забыли формулу Симпсона [3], то напомним, как с ее помощью аппроксимировать инb теграл I = ∫a f (x )dx . Для этого разделим интервал интегрирования на 2n рав-
ных частей точками x 0 = a, x1 = a+h, x2 = a + 2h, . . . , x2n = a + 2nh = b, где h = (b– a)/2n. 33
1 3
Тогда получим I ≈ h (y0 + y2n + 2(y2 + y4 + . . .+ y2 n–2) + 4(y1+ y3+. . . y2 n – 1)), где yi = f(xi)]. 7.4. Проект: функция Римана. Несколько более заманчиво в качестве упражнения использовать функцию 1 1 1 1 1 1 3 2 Ri ( x) = Li ( x) − Li ( x ) − Li ( x ) − Li ( x 5 ) + ... 2 3 5 У Вас без сомнения вызывает интерес вопрос, каким будет следующий член разложения! Несомненно, что π(x)/Ri (x) → 1 при х → ∞, быстрее, чем в ранее рассмотренных случаях. Эксперименты с числами, полученными ранее, продолжим, используя даже первые члены разложения Ri(x). Дальнейшее подтверждение результатов может быть найдено на последней стадии: см. ниже, п. 8.10. 7.5. Время на определение принадлежности к простым числам путём пробного деления. Представим пример по использованию теоремы о простых числах для оценки времени, необходимого для определения простоты пробным делением. Чтобы доказать, что число n простое, необходимо оценить результат пробного деления на простые числа, вплоть до n , а также n /ln n . Выберем n = 10k, что означает пробное деление до примерно 10k/2 /((k/2) ln 10) числа. Примем, очень оптимистично, что пробное деление числа 106 происходит каждую секунду, тогда времени для доказательства того, что данное число простое, потребуется примерно
10
k 2
=
k 2
10 ⋅ 2,75 ⋅ 10−14 лет. k
(k )(ln10)(10 ⋅ 60 ⋅ 60 ⋅ 24 ⋅ 365) 2 Даже для достаточно скромного числа k = 30 (30-значное простое число) это время приближается к 11 месяцам, а для k = 50 оно доходит до 5,5 × 109 лет. Для k = 100 оно больше, чем 2,75 × 1034 лет. Таким образом, представлено доказательство того, что определение простоты путём пробного деления реально неосуществимо для достаточно больших чисел. В этом пособии мы ограничили такие доказательства числами, меньшими 1010, чтобы придать интерес к другим методам доказательства простоты числа. Приведённые здесь вычисления должны показать, что использование пробного деления непрактично, даже при использовании больших компьютеров. 8. Решето Эратосфена 6
8.1. Компьютерные упражнения 1. Измените программу для получения простых чисел ≤ 5000. 34
2. Сделайте программу немного более эффективной для полного игнорирования чётных чисел, а использование массива key[1 . . 999] соответствовало бы только нечётным числам 3, 5, 7, . . . , 1999. Наконец, 2i + 1 будет простым числом только если a[i] = TRUE. 8.2*. Компьютерное упражнение. Используйте решето Лежандра для нахождения π(x), где x = 105, 2 · 105, 3 · 105, . . . , 106. Для x = 6 · 105 Si будет равняться: 599 999, 1297 809, 1 263 496, 698 663, 207 842, 26 863, 961, 2; также π x = 137, давая для целого π(x) = 49 098.
( )
8.3*. Проект: Li (x) и Ri(x) снова. Найдите функции Li (x) и Ri(x) (см. выше) для значений х из п. 8.2. Найдите также x/ln x для тех же значений х и постройте графики зависимости х от этих трёх функций, а также действительное значение функции π(х). Какая аппроксимация подходит лучше? 8.4. Компьютерное упражнение. Используйте программу для нахождения π(1000), π(2000), π(3000) и π(4000). Вы можете заметить, что это получение решения протекает крайне медленно во времени. Попробуйте рассчитать значительно меньший пример вручную, чтобы выяснить, почему это происходит. Сумеете ли Вы ускорить выполнение программы? 8.5. Проект: счастливые числа. Существует другое сито, во многом похожее на решето Эратосфена, которое даёт другую последовательность чисел с распределением почти как у простых чисел. Действительно, можно сказать, что распределение простых чисел будет меньше их «простоты», чем на самом деле они могут генерироваться решетом. Представим это решето. Начнём, как и ранее, с положительных целых чисел. Будем вычёркивать каждое второе целое число в списке, начиная счёт с 1 (таким образом Вы вычеркните 2, 4, 6, . . .). Следующее малое число слева будет 3, и мы вычеркнем каждое третье число, начиная счёт с 1 (вычеркнем 5, 11, 17, . . .). Теперь 7 – наименьшее целое число слева от 3, аналогичным образом вычеркнем все седьмые числа слева, начиная с 1. Это может продолжаться неопределённо долго. Числа, которые остаются после этой процедуры, будут счастливые числа. Напишите программу для поиска всех счастливых чисел < 10 000. Проверьте, будут ли следующие цифры L(x) счастливыми числами ≤ x:
x 103 2 × 103 3 × 103 4 × 103 5 × 103 6 × 103 7 × 103 8 × 103 9 ×103 104 L(x) 153 276 390 503 610 716 816 920 819 918 Каким образом связать эти значения с «теоремой о счастливых числах» вида L(x) = x/ln x? Сделаем некоторые подсказки перед написанием программы. Ошибочным было бы использовать единственный массив для хранения, скажем, 35
нечётных чисел до 10 000 и последовательно просеивать их через этот массив, исключая большинство чисел после каждого прохода. Это потребует просева приблизительно всего массива каждый раз (заметим, что с простыми числами мы могли, по крайней мере, начинать с p2, где р было текущим простым числом, используемым для просева). Лучше использовать два массива, из которых в первом находились бы числа, которые прошли просев, с нулём в конце ряда чисел, который выполнял бы роль «часового», определяя конец. Второй массив будет содержать только числа, которые остались после просева, занимая место в текущем проходе через первый массив. Таким образом, числа записываются из первого массива во второй только, если они сохранятся после отсева. Например, отсеивая по 3, в первом массиве должны быть числа: 1, 3, 7, 9, 13, 15, 19, 21, 25, 27, 31, 33, 37, 39, 43, 45, . . . Числа, записанные во второй массив тогда будут (просеивая по 7): 1, 3, 7, 9, 13, 15, 21, 25, 27, 31, 33, 37, 39, 43, 45, . . Роль этих двух массивов тогда меняется, и на следующем проходе осуществляется просев по 9. 9. Сравнения 9.1. Упражнения 1. Приведите пример, показывающий, что если a ≡ b (mod m), тогда а2 не обязательно будет сравнимо b2 (mod m2). (Несмотря на то, что сравнение должно сохраняться по m). 2. Покажите, что для некоторого целого числа a a2 ≡ 0 или 1 (mod 4). Также покажите, что a4 ≡ 0 или 1 (mod 16). [Запишите a = 2k или 2k + 1. В последнем случае полезно вспомнить, что k·(k + 1) всегда чётное число, так как либо k, либо k + 1 будет чётным]. 3. Докажите, что если число вида 16n + 15 представимо суммой a14 + + a24 + . . . + ar4 целых чисел ai ≥ 0 в четвёртой степени, тогда r ≥ 15. (Общеизвестно, что любое целое число представимо суммой из 19 чисел в четвёртой степени. Число 79, например, определённо нуждается в 19 натуральных числах в четвёртой степени: 79 = 4 × 24 + 15 × 14, что является наиболее экономичным представлением). 4. Покажите, что для некоторого a a2 ≡ 0, 1 или 4 (mod 8). Докажите, что число вида 8k + 7 не может быть представлено суммой трёх квадратов от целых чисел ≥ 0. 5. Покажите, что если n – нечётное, то n2 ≡ 1 (mod 8). Покажите также, что если 3 | n, тогда n2 ≡ 1 (mod 3). [Используйте представление n ≡ 1 или 2 (mod 3)]. Докажите, что если n – нечётное и не кратное 3, тогда n 2 ≡ 1 (mod 24). (В особенности это применимо к некоторому простому числу n > 2). Из чего следует, что если n и m оба нечётные и не имеют делителя 3, то 24 | (n2 – m2)? 36
6. Покажите, что если p – простое число, тогда x2 ≡ y2 (mod p) означает, что x ≡ ±y (mod p). [p | (x – y)(x + y), где р – простое число]. Приведите пример, показывающий, что это не выполняется, если р – составное число. 7. Особым случаем пункта 6 будет x2 ≡ 1 (mod p), означающий, что x ≡ ± 1 (mod p). Покажите, что если р – нечётное простое число и k ≥ 1, тогда x2 ≡ 1 (mod pk), означающее, что x ≡ ± 1 (mod pk). [C нашей точки зрения это значит, что pk | (x – 1)(x + 1) и (x – 1, x + 1) = 1 или 2, так как p не может быть делителем обоих коэффициентов]. 8. Покажите, что если p – простое число и k ≥ 1, тогда x2 ≡ x (mod pk), что равноценно сравнениям x ≡ 0 или х ≡ 1 (mod pk). [Исключительным случаем будет, если (х, х – 1) = 1]. 9. Пусть n будет простым числом ≥ 0 и пусть х = ⎡⎣ 4n + 1 ⎤⎦ , y = = ⎡⎣ 4n + 2 ⎤⎦ , z = ⎡⎣ 4n + 3 ⎤⎦ . Используйте первую половину п. 2, чтобы показать, что из этих трёх квадратных корней только первый, возможно, будет целым числом. Далее покажите, что если k – целое число и x ≤ k ≤ z, тогда k = x. [Вы можете рассмотреть x ≤ k < y и y ≤ k ≤ z отдельно]. Докажите, что x = y = z. 10. Покажите, что для любого простого числа n ⎡⎣ 4n + 1 ⎤⎦ ≤ ≤ n + n + 1 ≤ ⎡⎣ 4n + 3 ⎤⎦ . Выведите из п. 9, что x = y = z = [ n + n + 1 ]. 11. Пусть rn – число (10n – 1)/9, чьё десятичное представление содержит n единиц. Покажите, что d | rn, если и только если 10n ≡ 1 (mod 9d). Покажите, что если d | ra и d | rb, тогда d | ra+b, и если a > b, тогда d | ra – b. 12. Пусть n = a0 + 10 a1 + 102 a2 + . . . + 10k ak, где 0 ≤ ai ≤ 9 для всякого i такого, что десятичное представление числа n будет ak a k–1 . . . a1 a0. Покажите, что для модуля 3 или модуля 9, n ≡ ak + ak–1 + . . . + a1 + a0. Докажите хорошо известный тест делимости на 3 или 9: число делится на 3 (соответственно, 9), если и только если сумма их десятичных цифр делится на 3 (соответственно, 9). 13. Аналогично покажите, что число делится на 11, только и если только альтернативная сумма ak – ak–1 + a k–2 – . . . ±a0 делится на 11. 14. Предположим, что a, b, c, d, x, y – целые числа, удовлетворяющие выражениям: (ad – bc, m) = 1 и ax + by ≡ 0 (mod m), cx + dy ≡ 0 (mod m). Покажите, что х ≡ 0 и y ≡ 0 (mod m). [Как в случае обыкновенных линейных уравнений, сократите у умножением первого сравнения на d, а второго на b с последующим вычитанием]. 15. Предположим, что р – простое число, а а > 1, m ≥ 1 являются целыми числами такими, что a2m ≡ – 1(mod p). На основании этого покажите, что наибольший общий делитель a2m + 1 и a2n + 1 будет 1, если а – чётное, и 2, если a – нечётное. [Подсказка. Покажите, что если р – делитель обоих чисел, тогда p | 2]. 37
16. Покажите, что для любых целых чисел h и k, ⎧0,1, 4(mod8), если h ≡ 0(mod 4), ⎪ h 2 + k 2 ≡ ⎨1, 2, 5(mod8), если h ≡ 1, 3(mod 4), ⎪0, 4, 5(mod8), если h ≡ 2(mod 4) . ⎩ Докажите, что не существует решений уравнений (x + 1)2 + a2 = (x + 2)2 + b2 = (x + 3)2 + d2, для целых чисел x, a, b, c, d. 17. Для целого числа n могут ли все числа n + 1, n + 3, n + 7, n + 9, n + + 13, n + 15 быть простыми? [Рассмотрите модуль 5]. 18. Предположим, что s – простое число и s | (np-1 – 1), но s не делит (nq – 1). Покажите, что s не делит (N – 1), где (n pq − 1)(n − 1) N= p . (n − 1)(n q − 1) 285 − 1 16 − 1. Докажите, что 2 – 1 является делителем числа 17 (2 − 1)(25 − 1) (Заметим, что 216 – 1 не является простым числом!). 19. Покажите, что для n чётного, 1 + 2 + 3 + . . . + n ≡ 0 (mod n). Докажите, что когда n – чётное, то невозможно найти перестановку a0, a1, . . . , an–1 последовательности {0, 1, . . . , n – 1] такую, что числа a1 – a0, a2 – a1, . . . , an–1 – an-2 будут все различные (и, конечно, ненулевыми) по mod n. Для чётного n сумеете ли Вы найти такую перестановку? (Такая перестановка иногда называется прямая терраса). 20. Покажите, что если х ≡ ±1 (mod 3), тогда х3 ≡ ±1 (mod 9). Используйте этот результат, чтобы показать, что невозможно найти целые числа x, y, z, из которых ни одно не делится на 3, и таких, что x3 + y3 = z3. Это «первый» или «простой» случай последней теоремы Ферма для показателя 3. Её значительно труднее доказать, чем то, что уравнение не имеет решений для всех ненулевых целых чисел. 21. Покажите, что если n ≥ 5, тогда 2n! ≡ 76 (mod 100). 9.2. Проект. Доводя до конца вышеизложенный метод и создавая, таким образом, ряд покрывающих сравнений по всем модулям, которые являются делителями 120. Заметим, что наименьшим модулем будет 3. Существуют ряды покрывающих сравнений с наименьшим модулем 4; вышеприведённый метод даёт один с N = 720, но также существует ещё один с N = 360. 9.3. Упражнение. Докажите, что не существует ряда, который основывается, как показано выше, на делителях числа вида 3a 5b. [Подсказка. Найдите ∑∑ 3–r 4–s, где r и s принимают значения от 0 до ∞. Потом вычтите 1, чтобы отказаться от r = s = 0; ответом будет < 1]. 38
9.4. Компьютерное упражнение: ряд Фибоначчи по mod m Пусть m ≥ 2 и f0 = 1, f1 = 1, fn+2 ≡ fn+1 + fn (mod m) для n ≥ 0. Последовательность fi повторится, когда два последовательных члена повторяются как последовательные члены в конце последовательности. Почему это означает, что последовательность обязательно повторится? Обратите внимание, что если fn ≡ fn+k, fn+1 ≡ fn+k+1, где k > 0, тогда, действительно, f0 ≡ fk, f1 ≡ fk+1 (все по mod m), так что последовательность повторяется сначала. Задавая k = = k(m) как можно меньше, мы назовём периодом последовательности Фибоначчи по mod m. Например, при m = 7 членами по модулю 7 будут 0, 1, 1, 2, 3, 5, 1, 6, 0, 6, 6, 5, 4, 2, 6, 1, а после всё повторится, так как k(7) = 16. Напишите программу для вычисления k(m) для различных значений m и проверьте следующее: 1. Если m – простое число ≡ ± 1 (mod 10), тогда k(m) | (m – 1) является собственным делителем m – 1? 2. Если m является простым числом ≡ ± 3 (mod 10), тогда k(m) | (2m + + 2). Для каких значений m < 1000 k(m) является собственным делителем 2m + 2? (Для m = 7, k(m) = 2m + 2). 3. Для некоторого простого числа р < 1000, k(p) ≠ k(p2). 10. Инверсии по mod m и решения соответствующих сравнений
В этом разделе мы ответим на вопрос: имея а, когда существует b такое, что ab ≡ 1 (mod m)? Мы также вычислим b из а, когда b существует; b называется инверсией a (mod m), и мы можем записать b ≡ a–1. 10.1. Упражнения 1. Решите следующие сравнения (или покажите, что они не имеют решений): 2x ≡ 3 (mod 7); 10x ≡ 3 (mod 18); 2x ≡ 3 (mod 15); 10x ≡ 15 (mod 17); 10x ≡ 3 (mod 27); 35x ≡ 14 (mod 182). [Ответы на последние два задания: x ≡ 3 ( mod 27); x ≡ 16 (mod 26)]. 2. Предположим, что ax ≡ c (mod m), 0 < a < m. Пусть m = ka + a1, где 0 ≤ а1 < а; таким образом, a1 является наименьшим положительным вычетом a (mod m) и k = [m/a]. Используйте axk ≡ ck (mod m), чтобы показать, что a1x ≡ –ck (mod m), которое является другим сравнением того же самого вида, как то, с которого мы начинали, но с коэффициентом при х, который наименьший положительный). При повторении процесса, коэффициент при х может случайно стать равным 0; отсюда, на предыдущем шаге коэффициент a′ при х делит m, т. е. сравнение имеет вид a′x ≡ c′ (mod m). Конечно, если a′ | c′, тогда отсутствует решение; в противном случае это равносильно x ≡ (c′/a′) (mod m′/a′). Достаточно часто коэффициент при х становится единицей на предыдущем шаге перед тем, как станет 0; в некоторых случаях 39
окончательное сравнение может быть объяснено. Решения первоначального сравнения находятся среди более поздних, но некоторые решения окончательного сравнения отбрасываются, так как они не удовлетворяют начальному. Например, рассмотрим сравнение 17х ≡ 13 (mod 122), которое имеет единственное решение по (mod 122), так как 17 и 122 взаимно простые числа. Последовательные упрощения дают 3х ≡ 31 (mod 22) и 2х ≡ ≡ 102 (mod 122). Последнее сравнение эквивалентно x ≡ 51 (mod 56), которое имеет два решения по (mod 122): x ≡ 51 и x ≡ 107, но только х ≡ 51 (mod 122) удовлетворяет начальному сравнению. Решите сравнения вышеупомянутого п. 1 этим методом. Заметьте, что возможно для сравнения, не имеющего решений, получить сравнение с решениями! 10.2. Компьютерные упражнения 1. Используйте программу для нахождения решений сравнений вида ax ≡ c (mod m), где а и т – взаимно простые числа. Обобщите результат для нахождения решений, когда (a, m) = h и h | c. Убедитесь, что программа работает с повторным решением сравнений. 2. Напишите программу для решения сравнения ax ≡ c (mod m), где (а, т) = 1. 10.3. Упражнения. Здесь мы найдём решения сравнения х ≡ 1 (mod pq), где p и q – различные простые числа. 1. Покажите, что х2 ≡ 1 (mod pq), если и только если х2 ≡ 1 (mod p) и х2 ≡ 1 (mod q). 2. Рассмотрите случай х2 ≡ 1 (mod p), который имеет решения х ≡ ≡ ± 1 (mod p). Возьмите х = ±1 + kp; покажите, что оно удовлетворяет х2 ≡ ≡ 1 (mod q), если и только если (а) k ≡ 0 (mod q), давая х ≡ ±1 (mod pq) или (б) kp ± 2 ≡ 0 (mod q). 3. Пусть теперь r удовлетворяет выражению pr ≡ 1 (mod q). Покажите, что решениями х2 ≡ 1 (mod pq), полученными из (б) п. 2, будут x ≡ ±(1 – – 2pq) (mod pq). 4. Найдите четыре решения для сравнения х2 ≡ 1 (mod pq), где р = 101 и q = 113. 5. Покажите, что если p и q – оба нечётные, тогда четыре решения ± 1, ±(1 – 2pr) различны по (mod pq), а в случае, если p или q равно 2, тогда сравнение х2 ≡ 1 (mod pq) имеет точно два решения. 2
10.4. Упражнение. Существует интересное дополнение к упражнению 10.3, когда p и q оба нечётные. Действительно, пусть х1 будет решением сравнения х2 ≡ 1 (mod pq), где х1 ≡ ±1. 40
Используя теорему, предположим, что целые числа x, y, n удовлетворяют cравнению x2 ≡ y 2 (mod n), но при этом х не сравнимо с у; c – – у (mod n). Тогда (x – y, n) является собственным сомножителем n (т. е., сомножителем, отличным от 1 или n). То же относится и к (x + y, n); найдём, что (x1 + 1, pq) является собственным сомножителем pq и, отсюда, равняется p или q. То же самое подходит для (x1 – 1, pq). Проверьте это, используя вышеприведённую формулу в упражнении 10.3 (3) для нахождения решений. Очень просто решить систему линейных уравнений последовательной подстановкой. Приведём пример. Найдите все х, такие, что 6х ≡ 8 (mod 10) и 4х ≡ 7 (mod 9). Теперь 6x ≡ 8 (mod 10), если и только если 3х ≡ 4 (mod 5). Так как 3 × 2 ≡ 1 (mod 5), то должны быть решения х ≡ 8 ≡ 3 (mod 5). Возьмём х = 3 + 5k. Тогда 4х ≡ 7 (mod 9) даёт 2k ≡ 4 (mod 9), т. е., k ≡ 2 (mod 9). Отсюда, k = 2 + 9 j и x = 3 + 5(2 + 9 j) = 13 + 45 j. Из этого следует, что главным решением будет х ≡ 13 (mod 45). 10.5. Упражнения 1. Решите следующие системы сравнений: 3x ≡ 3 (mod 15) и 4x ≡ 2 (mod 21). [Ответ: x ≡ 11 (mod 105)]. 10x ≡ 10 (mod 25) и 3x ≡ 8(mod 10) и 7х ≡ 12 (mod 15). [Ответ: х ≡ 6 (mod 150)]. 2. Какое наименьшее число, большее 1, дающее остаток 1, когда будет разделено на все числа 2, 3, . . . ,10? [Найдите наименьшее общее кратное, которое даёт остаток 1, когда будет разделено на все числа ряда 2, 3,. . ., 50]. Какое наименьшее положительное число, дающее в остатке 1, когда делится на 2, остаток 2 при делении на 3 и т. д., вплоть до деления на 10? [Почему это эквивалентно x ≡ – 1 (mod HOK(2, 3, . . . , 10))?]. 3. Найдите приблизительно, насколько велико наименьшее число, большее 1, которое дает остаток 1 при делении на все числа 2, 3, . . . , 50? [Ответ: приблизительно 3,1 ×1021]. 4. Наименьшее общее кратное чисел 1, 2, . . . , 12 будет 27 720. Если число х даёт в остатке i – 1 при делении на i для всех делителей i = 2, 3, . . . , 12, тогда из этого следует, что x ≡ – 1 (mod 27 720). Каково наименьшее аналогичное число для максимального делителя 13? 5. Предположим, что х является целым числом, 0 ≤ х ≤ 99, а последние две цифры х2 совпадут с цифрами х. Целью является нахождение возможных значений х. Заметим, что это эквивалентно решению уравнения х2 ≡ ≡ х (mod 100), что равноценно х2 ≡ x (mod 4) и х2 ≡ x (mod 25). Покажите, что существуют всего четыре случая: х ≡ 0 (mod 4 и mod 25); х ≡1 (mod 4 и mod 25); х ≡ 0 (mod 4) и х ≡ 1 (mod 25); х ≡1(mod 4) и х ≡ 0 (mod 25). 41
Теперь попытайтесь найти все решения для х. Вы можете найти массу примеров сравнений, некоторые из них очень трудны для решения, так как они требуют разложений десятичных чисел, например: каково наименьшее число, состоящее только из 3, 5 и 7, такое, что само число и сумма его цифр делятся на 3, 5 и 7? {Ответ: 33577577777777775]. 10.6. Компьютерные упражнения. Напишите программу решения системы сравнений ax ≡ b (mod m) и сх ≡ d (mod n), принимая, что (a, m) и (c, n) оба равны 1. 10.7. Компьютерные упражнения. Эти упражнения могут быть выполнены вручную, но Вы можете использовать программу п. 10.6, полезную для экспериментов с используемыми числами. 1. Найдите все числа х, 0 ≤ х ≤ 999, удовлетворяющие 2 х ≡ х (mod 1000). Сравните с вышеприведенным п. 10.5 (5). Обратите внимание на числа, которые совпадают с последними тремя цифрами их квадратов. 2. Требуется найти решение сравнения 3х2 ≡ х (mod 10000). Первая проверка даёт (х, 3х – 1) = 1 и тогда можно свести к четырём случаям упражнения 10.5 (5): х ≡ 0 (mod 24 и mod 54); 3х ≡ 1(mod 24 и mod 54); х ≡ 0 (mod 24) и 3х ≡ 1(mod 54); 3х ≡ 1(mod 24) и х ≡ 0 (mod 54). 3.* Решите сравнение х3 ≡ х (mod 1000) для 0 ≤ х ≤ 999. Это слегка более оригинально, чем в пунктах (1) и (2), так как х3 – х = х(х – 1)(х + 1), но эти три сомножителя не являются попарно взаимно простыми, когда х нечётное число. Существует интересный результат, касающийся сравнений ax ≡ y по модулю простого числа р, известный как лемма Тью (1902). Мы будем иметь возможность использовать её несколько позднее. 10.8. Лемма Тью. Пусть р будет простым числом и p не делит a. Тогда существуют х и у, 0 < | x | < p и 0 < | y | < p , удовлетворяющие сравнению ах ≡ у (mod p). 10.9. Китайская теорема об остатках. Пусть m1, m2, . . . , mr – положительные числа, а каждая пара взаимно простая: (mi, mj) = 1, когда I ≠ j. Тогда система сравнений x ≡ a1 (mod m1), x ≡ a2 (mod m2), . . . , x ≡ aк (mod mк) имеет единственное решение – модуль произведения m1 m2 . . . mr. 10.10. Упражнения 1. Решите сравнения х ≡ 4 (mod 7), х ≡ 6 (mod 9), х ≡ 1 (mod 10) с помощью последовательной подстановки. [Ответ: х ≡ 501 (mod 630)]. Конечно, 42
Вы могли упорядочить сравнения выбором модулей пар взаимно простых чисел и начать с ответа! 2. Предположим, что р – простое число, и существует а такое, что a ≡ –1 (mod р). (Мы увидим позднее, что это абсолютно справедливо для простых чисел вида 4k + 1). Используйте лемму Тью (п. 10.8) для доказательства того, что существуют х и у такие, что х 2 + у2 ≡ 0 (mod р). (Так как р – сумма двух квадратов). 3. Пусть m и n – взаимно простые целые числа, и m – нечётное. Проверьте, используя китайскую теорему об остатках, что мы можем найти целые числа a > 0, b > 0 c делителем m для обоих чисел 2а + 1 и b, и с n – сомножителем для обоих a и b + 1. Теперь рассмотрим уравнение X2 + Y = Z2, которое, конечно, имеет решение в целых числах X, Y, Z – все > 0. Умножая обе части на Y2a Z2b, отсюда найдём целочисленные решения уравнения x2 + ym = z2n. Существует ли соответствующий результат для чётных m? 10.11. Проект: представление простых чисел вида 4k + 1 в виде суммы двух квадратов. Существует прекрасный алгоритм для нахождения целых чисел х и у таких, что х 2 + у 2 = р, где р – есть заданное простое число вида 4k + 1. Мы только установим это здесь и предложим Вам написать для него компьютерную программу. Нам необходимо найти а с условием а2 ≡ ≡ –1 (mod p). Теперь для некоторого с, удовлетворяющего условию p | c, по-
лучим c
c
( p −1)
2
( p −1)
2
≡ ±1(mod p) ; начиная с с = 2, мы найдём с, которое будет
≡ −1(mod p) . (Полученный результат говорит о том, что с не является ( p −1)
4 , помня, что точным квадратом по mod p). Мы тогда выберем a = c p – 1 делится на 4. Прекрасным алгоритмом будет следующий: применим алгоритм Евклида к р и а; первыми двумя остатками, которые меньше p , будут подходящие целые числа х и у, для которых х2 + у2 = р. (Заметим, что остатки в конце концов достигают 1, так как они, несомненно, будут остатками, меньшими, чем p ). Несложно расширить китайскую теорему об остатках до главных модулей, хотя и отсутствует простая привлекательная формула для решения. Мы уже встречались с некоторыми с подобными примерами ранее. Результат отражен в п. 10.12.
10.12*. Система линейных сравнений с произвольным модулем. Сравнения х ≡ ai (mod mi), i = 1, . . . , r имеют систему решений, если и только если для всех i ≠ j, (m i, m j) | (ai – aj). Решение тогда единственно по mod [m1, . . . , mr] = наименьшему общему кратному m 1, . . . , mr. 43
В качестве примера рассмотрим х ≡ 5 (mod 6), х ≡ 9 (mod 10) и х ≡ 2 (mod 9). Гипотезы п. 10.12 удовлетворены, и мы решим последовательной подстановкой. Таким образом, выражение х = 5 + 6 u, подставленное во второе сравнение, даёт 6u ≡ 4 (mod 10), т. е., 3u ≡ 2 (mod 5), так что получим u ≡ 4 (mod 5), u = 4 + 5 v, что дает х = 29 + + 30 v. Подстановка в третье сравнение даёт 30v ≡ 0 (mod 9), т. е., 10v ≡ 0 (mod 3), так что v ≡ ≡ 0 (mod 3) и, наконец, х ≡ 29 (mod 90) является решением. Заметим, что данные сравнения можно привести к системе х ≡ 1 (mod 2), х ≡ 4 (mod 5) и х ≡ 2 (mod 9), которая может быть решена по формуле из доказательства китайской теоремы об остатках. 10.13*. Проект. Напишите программу для решения системы из трёх сравнений х ≡ a (mod m), х ≡ b (mod n), х ≡ c (mod k), сначала проверяя, существует ли решение на основе критерия п. 10.12. Проверьте, что решением системы сравнений х ≡ 20 (mod 28), х ≡ 10 (mod 90), х ≡ 55 (mod 105) будет х ≡ 1000 (mod 1260), и предложите Ваш собственный пример для дальнейшей проверки программы. 11. Дальнейшие примеры сравнений 11.1. Проект: простые числа в арифметической прогрессии. Пусть r ≥ 3 и пусть d будет чётным и ≥ 4. Нужно найти r последовательных простых чисел арифметической прогрессии: p, p + d, p + 2d, . . . , p + (r – 1) d. 1. Пусть r = 3d, d = 6. Таким образом, р, р + 6, р + 12 являются последовательными простыми числами. Покажите, что если 3 | (p + 1), 5 | (p + 3) и 7 | (p + + 2), тогда p + i будет составное число для 1 ≤ i ≤ 11, i ≠ 6. Покажите, что эти условия делимости обеспечивают р ≡ 47 (mod 105). Напишите программу для нахождения р, которое < 10 000 и, удовлетворяя этому сравнению, дает три последовательных простых числа в арифметической прогрессии. 2. Принимая, что p > 3 и р, р + d, p + 2d – все простые числа (так r = 3 cнова), покажите, что d ≡ 0 (mod 3). [Подсказка: покажите, что если 3 не делит d, тогда р, р + d, p + 2d будут различными по модулю 3. Почему это является противоречием?) Так как d – чётное число, это даёт d = 0 (mod 6). [Получен результат, аналогичный для пяти простых чисел (все >5), образующих арифметическую прогрессию с разностью d: мы имеем 2 × 3 × 5 = 30 | d. Без сомнения здесь Вы можете увидеть главный результат! По-видимому, первое упоминание об этом найдено у Варинга в 1770 г.]. 3. Пусть r = 4, d = 6. Покажите, что если 3 | (p + 1), 5 | (p + 4), 7 | (p + 2) и 11 | (p + 8), тогда p + i составное число для 1 ≤ i ≤ 17, i ≠ 6, 12. Покажите, что эти условия делимости выполняются для р ≡ 971 (mod 1155), и найдите такое наименьшее р, которое обеспечивает получение четырех последовательных простых чисел в арифметической прогрессии. (Подсказка: это про44
стое число находится между 200 000 и 300 000). Вы также могли бы найти наименьшее простое число р из всех, которое даёт р, р + 6, р + 12, р + 18 последовательные простые числа. 11.2. Проект: наибольшее количество простых чисел в арифметической прогрессии
Три простых числа, начиная с 3, а именно, 3, 5, 7 образуют арифметическую прогрессию. Найдите пять простых чисел 5, 5 + d, 5 + 2d, 5 + 3d, 5 + 4d и найдите семь простых чисел 7, 7 + d, . . . , 7 + 6d (это требует различных значений d). (К сожалению, наименьшее d, для которого 11, 11 + + d, . . . , 11 + 10d являются простыми числами, будет d = 1 536 160 080). Следуя данным намёкам, напишите доказательство теоремы: если р, р + d, p + 2d, . . . , p + (p – 1)d – все простые числа, тогда d делится на каждое простое число q при условии 2 ≤ q < p. (Например, для р = 7, d должно делиться на 2, 3 и 5 и, следовательно, на 30). От противного примем, что q является простым числом, q < p и q не делит d. Докажите, что нет двух чисел из ряда p, p + d, . . . , p + (q – 1) p, которые сравнимы по модулю q. Так как среди них существует q, почему из этого следует, что одно из них ≡ 0 (mod q)? Используйте q | (p + jd) для некоторого j, 0 ≤ j ≤ q – 1, и факт, что q и p + jd – оба простые, чтобы получить противоречие. 11.3*. Упражнение: решение сравнения x2 ≡ 1 (mod m) Пусть модуль m представим как m = 2a p1a1 p2 a2 ... pr ar , где pi – нечётные простые числа в порядке возрастания. Идея заключается в том, чтобы доказать, что число решений сравнения x 2 ≡ 1 (mod m) будет ⎧0, если a = 0 или 1, 2 r+ e , где e = ⎪⎨1, если a = 2, ⎪2, если a > 2. ⎩ 2 ≡ 1 (mod m), если и только если Основой является то, что x 2 a a1 x ≡ 1(mod 2 ) и (mod p1 ) и . . . и (mod pr ar ) , так как эти модули попарно взаимно сопряженные. Более того, если однажды Вы нашли решение каждого из этих r + 1 сравнений, единственное решение первоначального сравнения по (mod m) определяется из китайской теоремы об остатках. Достаточно трудно найти решения сравнений по mod 2a и другие сравнения, имеющие решения ± 1. В особенности, покажите, что для a > 2 решениями x2 ≡ 1 (mod 2а) будут ± 1 и ±(1 + 2a –1) и что эти четыре числа различны по (mod 2a). 45
11.4. Упражнение: теорема Гаусса. Для фиксированного числа m > 1 рассмотрите числа х, которые взаимно просты с m и удовлетворяют условию: 1 ≤ х < m. (Мы встретим эти числа ещё не раз; иногда они называются приведенным набором вычетов по модулю m). Теорема Гаусса относится к произведению P этих чисел по модулю m: она утверждает, что это произведение дает +1 в случае m = 4, или примет вид pk или 2pk для нечётного простого числа р и k ≥ 1 в случае, когда произведение равно – 1. Идея очень простая: каждое число х, как и вышеописано, имеет обратное у такое, что ху ≡ 1 (mod m), более того, такое число у единственно и 1 ≤ y < m. Если у ≠ х, тогда в произведении Р появляются оба х и у и дают 1 при перемножении одного на другое. Условие, в противоположность, для х = у будет x2 ≡ 1 (mod m), так что Р то же самое, что произведение по (mod m) всех чисел х, для которых 1 ≤ x < m и x2 ≡ 1 (mod m). 11.5. Проект: магические квадраты Рассмотрим n × n массив, где строки обозначены 0, 1, . . . , n –1, а аналогичные столбцы обозначены 0, 1, . . . , n – 1. Мы желаем заполнить этот массив целыми числами 0, 1, . . . , n2 – 1. Представим возможное предписание для выполнения: разместить целое число k по строкам i и столбцам j, где модуль n, i ≡ e + ak + b[k/n] , j ≡ f + ck + d[k/n] (1) и a, b, c, d, e, f – фиксированные целые числа. (Значение наличия k и [k/n] состоит в том, что если будет известен модуль n, то k точно известно, так как оно лежит между 0 и n2 – 1). Например, для n = 4, e = f = 0, a = d = 1, b = c = 0 мы получим левый массив, а для n = 3, e = f = 0, a= 2, b = c = d = 1 мы получим правый массив. 0 4 8 12 0 8 4 1 5 9 13 7 3 2 2 6 10 14 5 1 6 3 7 11 15 Правый массив называется магическим квадратом, так как его строки и столбцы при сложении дают одно и то же число (именно 12). 1. Допустим, что (ad – bc, n) = 1. Покажите, что из формулы (1) следует, что никогда одно место в массиве не будут занимать два целых числа k и k′. Из этого следует, конечно, что массив точно заполнен числами 0, 1, 2, . . . , n2 – 1. 2. Теперь примем, что, раз (ad – bc, n) = 1, мы получим (a, n) = = (b, n) = (c, n) = (d, n) = 1. Рассмотрим особую строку в массиве (фиксируя i) такую, что ak + b[k/n] ≡ u (mod n) для фиксированного u и всех k в строке. Покажите, что два целых числа в различных позициях в этой строке не могут иметь одинаковых значений k (mod n), показывая, что они имели бы тогда одинаковые значения [k/n] (mod n). Используйте свойство (b, n) = 1 и также то, что в противоположность пункту 1 были бы использованы оди46
наковые целые числа. Аналогично покажите, что два целых числа в различных позициях не могут иметь одинаковые значения для k (mod n) и для [k/n] (mod n). Докажите, исходя из этого, что сумма целых чисел в строке будет 1 n (n2 – 1) – одинаковая для каждой строки. 2 Аналогично докажите, что суммы членов в столбцах одинаковы, так что квадрат, действительно, магический. 3. Используйте вышеприведённый метод для написания программы для получения магических квадратов порядка 3 и 5 (идеальным была бы распечатка чисел в квадратном массиве на экране). Где ошибка при n = 4? 11.6. Проект: ρ-метод факторизации Полларда. [7]. Трудно до конца понять, где этот метод может использоваться, но он дает прекрасные компьютерные программы и они, по крайней мере, просты для понимания самого метода! Пусть f(x) = x2 + 1 и запишем f2(x) = f(f(x)), f3(x) = f(f2(x)) и т. д. Пусть ak = f k(1). (Следовательно, а1 = 2, а2 = 5, аk+1 = ak 2 + 1). Конечно, вместо этого f можно использовать другие полиномы. Предположим, что мы хотим представить N в виде сомножителей, т. е., найти простое число р (возможно наименьшее простое число), для которого p | N. Конечно, последовательность {ak}, взятая по модулю р или по модулю N в конце концов будет повторяться, и ожидается, что это повторение будет происходить быстрее по mod p, чем по mod N. (Действительно, повторение будет реальной возможностью, если количество членов превзойдёт p ). Следовательно, мы надеемся, что ai ≡ aj (mod p) для j, больших i, при этом j не очень больших. Заметим, что тогда at ≡ aj-i+t (mod p) для всех t ≥ i. Конечно, мы не можем решить задачу нахождения ai mod p, пока не знаем, что собой представляет р, но мы можем решить задачу нахождения ai mod N. Просто запишем
p | ((aj – ai) mod N, N). (Смысл в том, чтобы разность aj – ai быстро становилась очень большой). Проделаем простое усовершенствование: так как i < j, то существует целое число t, для которого i < t ≤ j и (j – i) | t. (Это становится понятным, если задать вопрос, почему должно существовать целое число k, для которого i/(j – – i) < k ≤ j/(j – i), и тогда используйте t = k(j – i)). Более того, at = ak(i–-i ) ≡ a(k+1)(j–1) ≡ a(k+2)(j–1) ≡ . . . ≡ a2k(j–1) ≡ a2t (mod p), т. е., вместо контроля i и j, мы должны рассмотреть at и a2t для t = 1, 2, 3, . . . Таким образом, метод заключается в следующем. Зададим x = a1 = 2, y = a2 = 5. Заменим х на f(x), y на f(f(y)); таким образом, теперь x = a2, y = a4. Найдём (x – y, N). Повторим: теперь х = a3, у = a6. Найдём (x – y, N). 47
Продолжаем до тех пор, пока (x – y, N) не станет равным 1 или N (или должно быть выполнено столько шагов, что Вам надоест ждать). Конечно, х и у сокращаются по модулю n на каждой стадии, используя операцию x: = x – – N*INT(x/N), и т. д. Заметим, что вышеприведённый метод значительно лучше, чем сохранение ai в массиве; даже учитывая, что ai вычисляется дважды, при этом удаётся избежать проблемы, связанной с большими массивами чисел повышенной точности. После того, как число прошло цикл из нескольких итераций, Вы знаете, что t обеспечивает (a2t – at, N) нетривиальный делитель N. Напишите программу, выполняющую этот алгоритм для определения значений N со, скажем, восьмью цифрами, и проверьте этот метод умножением совместно двух или трёх простых чисел приемлемого размера для определения значения N. Вы, вероятно, будете удивлены скорости представленного метода для значений чисел около определённого размера. Действительно, возможно сделать его более эффективным с помощью некоторой хитрости; версия этого метода была использована Р. П. Брентом и Ж. М. Поллардом для факторизации огромного числа Ферма 2256 + 1 в 1980 г. Два простых сомножителя этого числа имели 16 и 62 цифры! Что представляет собой ρ-метод? См. рисунок 2! ai+1 ai-1
ai ≡ aj
ai+2
aj-1 a2 a1
aj-2
Рис. 2 12. Степени 12.1. Малая теорема Ферма. Пусть р будет простым числом, а а будет некоторым целым числом. Тогда ap ≡ a (mod p). Если p не делит a, тогда ap–1 ≡ 1 (mod p). 12.2. Упражнения 1. Используя 212 ≡ 1 (mod 13), докажите, что 4 ⋅ 270 ≡ 1 (mod 13), и отсюда 270 ≡ 10 (mod 13). Заметьте, что это показывает, что 270 + 370 делится на 13.
2. Аналогично пункту 1, покажите, что 298 + 398 делится на 13, а 2100 + 3100 делится на 97. 48
3. Начиная с n7 ≡ n (mod 7), докажите, что n13 ≡ n (mod 7) для любого n. Покажите аналогичным образом, что n13 ≡ n по модулю 5, 3 и 2. Докажите, что для любого n (n13 – n) делится на 2 · 3 · 5 · 7 · 13 = 2730. 4. Начиная с 216 ≡ 1 (mod 17), докажите, что (210) 6 ≡ 1 (mod 17). 5. Пусть f(n) = n6 + 1091. Покажите, что если 3 не делит n, тогда 3 | f(n) и, что, если 7 не делит n, тогда 7 | f(n). Докажите, что если n не кратно 42, тогда f(n) есть составное число. Покажите также, что если n ≡ ± 2 (mod 5), тогда 5 | f(n) делится на 5 (5 | f(n)), и докажите, что только единственно возможными значениями n, для которых f(n) является простым – это те, которые имеют вид 210k или 210k ± 84. (Действительно, согласно [7], только одно значение n меньшее 4000, а именно, 3906, даёт простое значение f(n). Вы можете сократить несколько чисел с помощью хитрых приёмов, но установить, что первое значение n = 210 · 19 – 84, делающее f(n) простым, достаточно сложно). 6. Пусть n = r 4 + 1 . Используйте малую теорему Ферма, чтобы показать, что n никогда не будет кратным 3, 5 или 7. [Например, число 5: r4 ≡ 1 (mod 5) всякий раз, когда 5 не делит r. Так n ≡ 2 (mod 5), когда 5 не делит r, и n ≡ 1 (mod 5), когда 5 | r ]. Можете ли Вы найти любой простой делитель n? (Действительно, наименьшим простым числом, которое может быть делителем, это 17. Только простые числа вида 4m + 1 могут быть делителями n. Более точным ответом будет 8m + 1). 12.3. Упражнение: частные Ферма. Если р – простое число и р | a, тогда, исходя из теоремы Ферма, (а р-1 – 1)/р будет целым числом. Оно называется частное Ферма и обозначается как qp(a). Предлагаем проверить несколько простых свойств. 1. Предположим, что p не делит a и p не делит b. Используйте
(ap–1 – 1)(bp–1 – 1) qp(ab) ≡ qp(a) + qp(b) (mod p).
≡
0
(mod
p2),
чтобы
показать,
что
2. Используйте биномиальную теорему, чтобы показать, что qp(p – 1) ≡ 1 (mod p) и qp(p + 1) ≡ –1 (mod p). 12.4. Теорема. Когда р – простое число, d ≥ 1 и d | (p – 1), то уравнение x ≡ 1 (mod p) имеет точно d решением сравнения по (mod p). d
12.5. Лемма. Пусть р будет простым числом и f(x) = a0 xn + a1 xn-1 + . . . + an, где p не делит a0. Тогда количество решений f(x) ≡ 0 (mod p), по крайней мере, равно n. Заметим, что предположение относительно того, что р является простым числом, необходимо. Например, х2 + х ≡ 0 (mod 6) имеет четыре реше49
ния: х ≡ 0, 2, 3, 5 (mod 6). Что Вы скажите относительно предположения, что d | p – 1? 12.6. Упражнения 1. Докажите напрямую результат п. 12.4 для случая нечётного простого числа р и d = 2. 2. Найдите решения сравнения xd ≡ 1 (mod 11) для d = 2 и d = 5.
3. Найдите решения сравнения xd ≡ 1 (mod 19) для d = 2, 3, 6 и 9. 4. Докажите, исходя из п. 12.4, что если d | p – 1 и аd ≡ 1, а ak не сравнимо с единицей для 1 < k < d, тогда существуют d различных решений по (mod p) для xd ≡ 1, точно равные x = 1, a, a2, . . . , ad–1. 12.7. Степенной алгоритм Если мы попробуем использовать теорему Ферма, особенно в плане возможности доказательства того, что отдельно взятое число а не простое, основываясь на условии, что n не делит a, мы получим, что аn–1 не сравнимо с 1 (mod n). Наихудшим возможным методом будет представление сначала аn, а затем нахождение вычета по модулю n, тогда мы должны быть в состоянии представлять большие числа с большими степенями по данному модулю. Несколько более разумно представлять последовательные степени а, а2, а3, . . . и приводить их по модулю n (находить вычеты по модулю n), пока это возможно. (Заметим, что мы использовали здесь положение, что если аk ≡ b (mod n), тогда аk+1 ≡ ab(mod n)). Но существует и другой путь, который значительно превосходит этот, позволяя очень большие степени представлять с очень большой скоростью. В качестве примера оценим 750 (mod 11). Сначала получим двоичное представление 50:
50 25 12 6 3 1
= = = = = =
25 ⋅ 2 + 0 12 ⋅ 2 + 1 6⋅2+0 3⋅2+0 1⋅2+1 0 ⋅. 2 + 1.
Таким образом, двоичное представление будет 110 010. (0 и 1 называются «битами» представления числа). То есть, 50 = 0 ⋅ 1 + 1 ⋅ 2 + 0 ⋅ 22 + 0 ⋅ 23 + 1 ⋅ 24 + 1 ⋅ 25, так что 750 = 70 ⋅ 72 ⋅ 70 × × 70 ⋅ 716 ⋅ 732. Представляя r ≡ 750 (mod 11), мы задали а = 7, r = 1 и квадрат а на каждом шаге, так что а = 72, 74, 78, 716, . . . , умножая текущее значение r на текущее значение а, если оно равно «1» в двоичном разложении 50. Оформ50
ление результатов в таблицу дает (используем символ d для обозначения бита в разложении): d
r
r (mod 11)
a (mod 11)
a
0 1 1 72 5 (d = 0, так что r остается 1) 5 74 3 (d = 1, так что r:= r ⋅ a = 1 ⋅ 5) 1 72 0 72 5 78 9 (d = 0, так что r не изменяется) 5 716 4 (d = 0, так что r не изменяется) 0 72 9 732 5 (d = 1, так что r = r. ⋅ a = 5 ⋅ 4) 1 718 1 750 1 764 3 (d = 1, так что r = r ⋅ a = 9 ⋅ 5) так что окончательно 750 ≡ 1 (mod 11). Аналогично двоичное представление десятичного числа 24 будет 11 000, и 724 = 78 × 716. Если мы представим его по mod 25, тогда 72 ≡ 1, так что все последовательные степени 74, 78, . . . будут 1, а 724 ≡ 1(mod 25). Заметим, что это имеет вид ар–1 ≡ 1 (mod p), где р не является простым числом! 12.8. Упражнение Покажите, что 350 ≡ 9 (mod 20). Найдите двоичное представление 341 и проверьте, что 2340 ≡ 1(mod 341). (Тяжелым шагом является доказательство, что 322 ≡ 1(mod 341)). Заметьте, что это другое составное число (341 = 11 ⋅ 31), удовлетворяющее заключению теоремы Ферма для a = 2. Замечание. Максимальное значение модуля, которое можно использовать для безопасного извлечения квадратного корня составляет примерно 109 для extended. Это относится к числам, которые перемножаются между собой, и они могут быть такими же большими, как модули. 12.9. Компьютерные упражнения 1. Используйте программу для представления 724 (mod 25) и 2240 (mod 341) и оцените относительно вопросов, поставленных перед этим. Также проверьте, что 5280 ≡ 67 (mod 561), 5560 ≡ 1 (mod 561) и, что 100560 ≡ 1 (mod 561).
2. Найдите 173313 и 331317 (mod 112 643). Как бы Вы поступили, чтобы найти НОД (pq – 1, qp – 1), где р = 17 и q =3313? (Будьте немного осторожны в ответе. Так как р ≡ 1 и q ≡ 1 (mod 16) НОД, несомненно, делится на 16). Что Вы скажете относительно НОД ((pq – 1) / (p–1), (qp – 1)/(q –1))? 3. Проверьте, если позволит точность, что 31 373 652 ≡1 (mod 1 373 653). Также найдите разложение на сомножители 1 373 653, чтобы доказать, что оно не простое число. Проверьте, что am ≡ a (mod m), и что m не является простым числом в следующем случае (a, m) = (2, 161 038), (2, 215 326), (2, 314 821), (3, 314 821), (5, 314 821), (7, 314 821). 51
В каком из представленных случаев справедливо am–1 ≡ a (mod m)? 4. Найдите решение сравнения х4 ≡ 1 (mod 821). (Так как 821 – простое число, то существуют четыре решения, из которых два найти просто). К вышеупомянутой программе можно добавить цикл. 5. Пусть m = 37 ⋅ 216 + 1 = 2 424 833. Проверьте, что 3732 ≡ – 1 (mod m). Теперь используем сравнение 37 ⋅ 216 ≡ – 1 (mod m), со степенью, увеличенной до 32, чтобы доказать, что m является делителем числа Ферма F9 = (22)9 + 1. (Этот факт был обнаружен А. Е. Вестерном в 1903 г., но полная факторизация F9 была проведена только в 1990 г.). 6. Также как в пункте 5, примем m = 11131 ⋅ 212 + 1 = 45592577. Увеличивая 11131 ⋅ 212 ≡ – 1 (mod m) до подходящей степени, покажите, что m является делителем (также простым) числа Ферма F10 = (22)10 + 1. Обратите внимание на то, что число Ферма содержит 309 цифр! Этот делитель был найден Д. Л. Селфриджем в 1953 г., но полная факторизация F10 произведена полвека спустя. 7. Существует много других примеров сомножителей k ⋅ 2n + 1 чисел Ферма, некоторые из которых получены прямой атакой, как в предыдущих двух примерах. Например, можете ли Вы найти малое число k такое, что m = k ⋅ 225 + 1, которое было бы сомножителем F23? (Представьте, что Вы хотите увеличить k ⋅ 225 ≡ – 1 (mod m) до соответствующей степени, такой, что показатель 25 будет настолько близко, насколько возможно, к 223 = 8 388 608). Вы можете проверить, что результирующий фактор m является простым числом. 12.10. Проект: р – 1 метод факторизации Полларда. Одной из версий этого метода факторизации будет следующая. Предположим, что р – простое число, а k такое, что (р – 1) | k!. Почему это означает, что все простые сомножители р – 1 будут < k ? Почему теорема Ферма утверждает, что 2 k! ≡ 1 (mod p)? Предположим, что мы хотим разложить на множители данное целое число N. Возьмём малое целое число, скажем, 2 и вычислим последовательно 21, 22, 26, 224, . . . , 2k! все по (mod N), где k является разумно большим (но не слишком большим!). Если р – простой сомножитель N, тогда, естественно, р является сомножителем (〈 2 k! – 1〉 N, N) и, по счастливому стечению, НОД будет р скорее, чем N. (Вспомните, что обозначение 〈 х〉 N принято для наименьшего положительного вычета x mod N). Напишите программу, осуществляющую этот метод и проверьте её на числах, которые являются произведением двух простых чисел. Заметим, что для успеха вычислений мы должны потребовать, чтобы все простые сомножители искомого фактора р были бы ≤ k. 52
13. Алгоритм Хэда умножения по mod m
Если Вы умножите два числа по модулю m обычным способом, тогда, естественно, возникает необходимость обращаться с большими числами порядка m2. Однако умножение – это только повторное сложение, так что, в принципе, можно проводить умножение без операций над числами, большими, чем 2 m. (Например, 3 × 8 по модулю 10 можно представить как 8 + 8 = 16 ≡ 6, 6 + 8 = 14 ≡ 4). Конечно, это было бы недопустимо непрактично проделывать для чисел из десяти цифр, и алгоритм Хэда (опубликованный в 1980 г.) представляет собой более тонкий путь выполнения умножения без представления чисел, больших, чем 2m. Формально мы уже выполнили его, так как в данном случае число 2m заменено на 4m, так что не стоит беспокоиться. Для повышенной точности это даёт возможность уверенно оперировать с числами, такими как 1018. Алгоритм Хэда может быть включён в виде подпрограммы в степенной алгоритм. Нам нужно умножить х и у по модулю m, где мы принимаем 0 ≤ х ≤ m, 0 ≤ y ≤ m. Метод проходит несколько стадий, и мы исключим некоторые детали, проверяемые в качестве упражнений. 1 13.1. Лемма. Пусть m ≥ 2, T = ⎡⎢ m + ⎤⎥ , t = T 2 – m. Тогда –T ≤ t ≤ T и ⎣
2⎦
T 2 ≤ 2m. 13.2. Лемма. Пусть x = aT + b, где 0 ≤ b < T. Тогда 0 ≤ а ≤ Т. Пусть y = c T + d, где 0 ≤ d < T. Тогда 0 ≤ с ≤ Т. 13.3. Лемма. а) определим z ≡ ad + bc (mod m), где 0 ≤ z < m. Тогда ad ≤ m, bc ≤ m и ху ≡ act + zT + bd (mod m).
б) пусть ac = eT + f, где 0 ≤ f < T. Тогда 0 ≤ е ≤ Т и xy ≡ (et + z)T + ft + bd (mod m). в) пусть v ≡ z + et (mod m), 0 ≤ v ≤ m. Пусть v = gT + h, где 0 ≤ h < T. Тогда 0 ≤ g ≤ T и xy ≡ hT + (f + g)t + bd (mod m). Вам, конечно, хотелось бы проверить результирующую программу на примерах, вышеприведенных для обычного степенного алгоритма. Хорошим тестом для вычислений с большими числами было бы взять a = 2 и m = некоторому большому простому числу, n = m – 1. Вычет по теореме Ферма будет равен 1. Представим целый набор больших простых чисел: 109 + 7, 1010 + 19, 1011 + 3, 1012 + 39, 1013 + 37, 1014 + 31, 1015 + 37. 53
13.4. Компьютерные упражнения 1. Пусть m = (22)5 + 1, a = 3, n = m – 1. Проверьте, что an не сравнимо с 1 (mod m). Это показывает, конечно, что m, пятое число Ферма, не является простым. Позднее мы дадим тест Пепина для оценки принадлежности числа к простым для Fk = (22)k + 1; это упражнение является примером этого теста. 2. Достаточно редкое явление для чисел вида ap-1 быть сравнимыми с 1 не только по mod p, как требует теорема Ферма, но и по mod p2. Простые числа, для которых это выполняется при a = 2, называются «простыми числами Вифериха», так как в 1909 А. Виферих рассматривал такие числа в связи с «последней теоремой Ферма». Многое неизвестно о таких простых числах, например, насколько их много. Вооруженные степенным алгоритмом в вышеприведенном виде, Вы можете это проверить для себя. Сравнение a p–1 ≡ 1 (mod p2) выполняется для следующих пар (a, p) (для очень больших чисел Вам потребуется extended точность!):
(2, 1093), (2, 3511); (19, 3), (19, 13), (19, 43), (19, 137), (19, 63 061 489); (41, 29), (41, 1 025 273), (41, 138 200 401). Заметим, что для заданного числа р решение сравнения аp–1 ≡ 1 (mod p2) может быть найдено методом «примитивных корней». 13.5. Проект: простые числа Вифериха. Добавляя подходящий цикл в программу степенного алгоритма, проверим, что для а = 2 существуют только простые числа p < 4000, удовлетворяющие выражению ap–1 ≡ 1 (mod p2), которые указаны выше, в п. 13.4 (2). (Действительно, не существует другого известного решения для а = 2). Также для а = 19 покажите, что единственные решения, скажем, для р < 1000 уже приведены выше. Для а = 53 найдите четыре простых числа меньших 100, которые удовлетворяют сравнению. 14. Псевдопростые числа 14.1. Определение. Пусть b будет положительным целым числом. Положительное целое число n может быть названо псевдопростым по основанию b, при условии, что b – составное число, а bn ≡ b (mod n). Заметим, если (b, n) = 1, тогда n будет псевдопростым числом по основанию b, если и только если b составное число, а bn–1 ≡ 1 (mod n). Действительно, некоторые авторы включают (b, n) = 1 в определение псевдопростого числа по основанию b, но мы используем более общее определение. Ясно, что псевдопростые числа по основанию 1 не вызывают особого интереса. 54
14.2. Компьютерные упражнения 1. Проверьте, что 341, 561 и 645 являются псевдопростыми числами по основанию 2. (Не забудьте проверить, что они составные!). 2. Убедитесь, что 161 038 и 215 326 являются псевдопростыми числами по основанию 2. Заметьте, что они являются чётными. Действительно, они являются наименьшими чётными псевдопростыми числами по основанию 2. 3. Проверьте, что 1105 является псевдопростым числом по основаниям 2 и 3, а 1729 будет псевдопростым числом по основаниям 2, 3 и 5, а 29 341 является псевдопростым числом по основаниям 2, 3, 5 и 7. 4. Определите первое число > 1015 (или 1010, если вы работаете без extended точности), которое либо простое, либо псевдопростое по основанию 2. Получите ли Вы аналогичный ответ по основанию 3? (Если это так, то вероятнее всего Вы нашли простое число). Если только взглянуть на первое «вероятно простое число» > 1015 на предмет определения является ли первое число простым, либо псевдопростым, когда оно не явно является составным числом, тогда, конечно, Вы пренебрежёте сомножителями 2, 3 и 5 для сокращения вычислений. 14.3. Упражнения 1. Покажите, что если (a, n) = 1 и n является псевдопростым числом по основаниям а и ab, тогда n является, несомненно, псевдопростым числом по основанию b. 2. Пусть р будет простым числом. Используйте теорему Ферма, чтобы показать, что 2р – kp – 2 = 0 для любого целого числа k. Имея r = 2p – 2, покажите, что 2r – 1 = (2p – 1)(2r–p + 2r–2p + . . . + 1) и докажите, что 2р – 1 будет либо простым либо псевдопростым числом по основанию 2. (Числа 2p – 1 называются числами Мерсенна). 14.4. Проект: псевдопростые числа по основанию более, чем одному Напишите программу для иллюстрации того, что числа, приведённые ранее в п. 14.2, являются наименьшими псевдопростыми числами по отношению к нескольким основаниям. (Не забывайте, что простые числа недопустимы). 14.5. Проект: псевдопростые числа по основанию 2. Напишите программу для нахождения всех псевдопростых чисел по основанию 2, которые меньше 2000. (Если не отбрасывать простые числа, то это будет очень простой проект). 14.6. Упражнения 1. Возьмите а = 3 и наименьшее допустимое значение для р и, отсюда, найдите псевдопростое число по основанию 3. 55
2. Приведём намётки доказательства того, что существует бесконечно много псевдопростых чисел по основанию 2. Действительно, это даёт то, что если n нечётное псевдопростое число по основанию 2, тогда N = 2n – 1. Заметим, что, так как это n cоставное, тогда найдём N, используя разложение на множители. Воспользуйтесь теоремой Ферма, чтобы показать, что 2n – 2 = kn для некоторого k, и докажите, что N | (2N–1 – 1). (Воспользуйтесь ещё раз разложением на множители). 3. Может ли 2n – 2 когда-нибудь быть псевдопростым числом по основанию 2? На этот вопрос утвердительно ответил У. Л. МакДаниэль (1989). Пусть n = 465 794; проверьте, используя степенной алгоритм, что 2n ≡ 3 (mod (n – 1)). Докажите, что (2 n −1 − 1) (2 2 −3 − 1) и, отсюда, что при n
N = 2n – 2, мы получим 2N ≡ 2 (mod N), так что, действительно, N является псевдопростым числом по основанию 2. Несмотря на вышеприведенное заключение в пункте (2), псевдопростые числа по основанию 2 встречаются значительно реже, чем простые числа. Действительно, существует 882 206 716 простых чисел, меньших, чем 2 × 1010, но только 19 865 псевдопростых простых чисел по основанию 2 находятся в этом диапазоне. Итак, если встречается число, могущее быть псевдопростым числом по основанию 2, то существует «очень большой шанс», что на самом деле оно простое. Конечно, вероятность повышается, если тестировать на псевдопростое число по более, чем одному основанию, например, 2, 3 и 5. Существуют числа, проходящие через эту сеть тоже. Действительно, существуют числа, проходящие через все тесты на псевдопростое число, но которые являются составными, как мы это сейчас покажем. 14.7. Определение. Составное число n, которое удовлетворяет сравнению bn–1 ≡ 1 (mod n) для всех b, являющихся взаимно простыми с n, называется числом Кармайкла (в честь Р. Д. Кармайкла, который представил их в 1912 г.).
Конечно, давая определение, мы не доказали, что такие числа существуют, но приведём пример. Пусть n = 561 = 3 ⋅ 11 ⋅ 17. Таким образом, (b, 561) = 1 означает, что (b, 3) = (b, 11) = (b, 17) = 1. Используя теорему Ферма, b2 ≡ 1 (mod 3) предполагает, что b560 = (b2)280 ≡ 1 (mod 3); b10 ≡ 1 (mod 11) означает, что b560 = (b10)56 ≡ 1 (mod 11); b16 ≡ 1 (mod 17) означает, что b560 = (b16)35 ≡ 1 (mod 17). Так как 3, 11 и 17 являются тремя различными простыми числами, то это означает, что b560 ≡ 1 (mod 561). Похожий прием можно применить для получения общего результата.
56
14.8. Теорема. Пусть n = q1 q2 . . . qk, где qi – различные простые числа и k ≥ 2. Предположим, что для каждого i, (qi – 1) | (n – 1). Тогда n будет числом Кармайкла. (Заметим, что простые числа должны быть нечётными, так как, если q1 = 2, тогда n – чётное, а q2, будучи нечётным, не удовлетворяет условию (q2 – 1) | (n – 1)). 14.9. Упражнения 1. Предположим, что р, 2р – 1 и 3р – 2 являются простыми числами, где р > 3. Покажите, что их произведение является числом Кармайкла. Вам необходимо показать, что р ≡ 1 (mod 6); вспомните, что некоторые простые числа находятся по формуле р ≡ ±1 (mod 6). В свете этого три простых числа могут быть представлены в более привлекательном виде 6m + 1, 12m + 1, 18m + 1 и m = 1, что даёт первый результат 7 ⋅ 13 ⋅ 19. Найдите следующее значение m, которое даёт три простых числа 6m + 1, 12m + 1, 18m + 1. 2. Предположим, что k = 2 в п. 14.8 и пусть q2 > q1. Покажите, что n – – 1 ≡ (q1 – 1) (mod (q2 – 1)) и найдите в этом противоречие. Следовательно, минимальное возможное значение для k в п. 14.8 будет 3 (как показано в примере перед п. 14.8). 3. Пусть n будет таким, как в п. 14.9 (1) (отсюда и число Кармайкла). Покажите, что bn ≡ b (mod n) по некоторому основанию b, являющемуся взаимно простым к n или нет. [Подсказка. Предположите, что (n, b) > 1. Почему (n, b) должно быть произведением простых чисел, взятых среди qi, которые появляются в (n, b) и bn–1≡ 1 (mod qi) для каждого qi, отсутствующего в (n, b)?]. Можно надеяться, что такие результаты, как в вышеприведённом пункте (1), помогут нам доказать, что существует бесконечно много чисел Кармайкла, но фактически обычно очень трудно определить насколько много простых чисел в двух и более выбранных последовательностях. Например, не всегда известно насколько много существует «парных простых чисел» р, р + 2. Вопрос о количестве чисел Кармайкла основательно был поставлен в 1992 г.; см. [7]. 14.10. Компьютерные упражнения 1. Представьте в виде сомножителей 29 341, 172 081, 564 651 361 и, отсюда, проверьте, что все они являются числами Кармайкла. 2. Найдите число Кармайкла 7 ⋅ 13 ⋅ 31 ⋅ q, где q – простое число, и три числа Кармайкла 13 ⋅ 37 ⋅ q, где q – простое число. (Конечно, Вы можете использовать критерий 14.8. Вероятно Вы пожелаете воспользоваться файлом простых чисел, созданным ранее). 3. Убедитесь, что m = 35 и m = 1515 дают числа Кармайкла в виде, описанном в п. 14.9 (1). (Несколько более трудным упражнением будет 57
проверка того, что они являются наименьшими значениями m после m = 1, а одно (если захотите) найдёте в п. 14.9 (1)). 4. Пусть р = 187 687, q = 375 373, r = 43 355 467. В действительности все представленные числа – простые. Невыполнимо, даже с использованием повышенной точности, проверить, что n = pqr является числом Кармайкла, так как pqr очень большое число. Отсюда покажите, что условие, что n – 1 делится на р –1, q – 1 и r – 1, эквивалентны следующему: (p – 1) | (qr – 1), (q – 1) | (pr – 1), (r – 1) | (pq – 1). Можно проверить эти условия с использованием повышенной точности; постарайтесь сделать это. Также замените r на 6 404 784 751 (также простое число) и проделайте то же самое. Эти три числа имеют вид 6m + 1, 12m + 1, 18mk + 1 для подходящих значений m и k; сравните с вышеприведённым п. 14.9 (1). 14.11. Проект: числа Кармайкла. Найдите все 16 чисел Кармайкла, которые <10 000. (Не забудьте о результате п. 14.9 (2)). Также найдите все числа Кармайкла, которые являются произведением трёх простых чисел, каждое из которых <100. 15. Теорема Вильсона 15.1. Теорема Вильсона. Целое число р > 1 является простым, если и только если (р –1)! ≡ – 1 (mod p). 15.2. Упражнения 1. Пусть p = 4k + 1 будет простым числом. Теорема Вильсона утверждает, что (4k)! ≡ –1(mod p). Рассмотрите члены 2k + 1, . . . , 4k, появляющиеся в произведении, дающем (4 k)!, и покажите, что в действительности ((2 k)!) 2 ≡ (4 k)! (mod p). Докажите, что х2 ≡ –1(mod p) имеет решения х = = ±(2 k)! (Исходя из вышеприведённой леммы 12.5, существуют только два решения). 2. Покажите, что р и (р + 2) будут оба простыми числами («двойные простые числа»), если и только если 4((р – 1)! + 1) + р ≡ 0 (mod p(р + 2)). [Подсказки для «если». Покажите, что р – нечётное, предполагая, что р – чётное, и используйте сравнение для получения противоречия. Используйте сравнение, чтобы показать, что (р – 1)! + 2 ≡ 0 (mod р), и докажите, что р – простое число с помощью теоремы Вильсона. Теперь используйте 4 (р – – 1)! + 2 ≡ 0 (mod р + 2), чтобы показать, что (р + 1)! + 1 ≡ 0 (mod р + 2), и докажите, что (р + 2) – простое число]. В качестве критерия того, что р и p + d оба простые числа, снова используйте теорему Вильсона.
58
15.3. Компьютерное упражнение. Проверьте, что для р = 563, (р – – 1)! ≡ –1 (mod p2). 15.4. Проект: простые числа Вильсона. Мы могли бы назвать простое число р «простым числом Вильсона», если (р – 1)! + 1 будет совпадающим с 0 не только по модулю р, но и по модулю р2. Напишите программу для нахождения простых чисел Вильсона и, особенно, проверьте, что их существуют только единицы <1000, а именно: 5, 13 и 563. 16. Тест Миллера
Рассмотрим следующие вычисления, все начинающиеся с проверки того, что некоторое число n является простым или псевдопростым числом по основанию b. n = 25, b = 7 : 724 ≡ 1, 712 ≡ 1, 76 ≡ –1 (mod 25). n = 2047, b = 2 : 22046 ≡ 1, 21023 ≡ 1 (mod 2047). n = 341, b = 2 : 2340 ≡ 1, 2170 ≡ 1, 285 ≡ 32 (mod 341) n = 561, b = 2 : 2560 ≡ 1, 2280 ≡ 1, 2140 ≡ 67 (mod 561). n = 2243, b = 2 : 22243 ≡ 1, 22242 ≡ 1, 21121 ≡ –1 (mod 2243)
(а) (б) (в) (г) (д)
В каждом случае мы удерживаем половину показателя до тех пор, пока не произойдёт одно из двух событий: либо показатель станет нечётным (как в (б), (в) и (ж)), либо вычет будет отличаться от 1 (как в (а), (в), (г) и (д)). В (в) и (д) оба события произошли на одном шаге. Если мы начнём с нечётного простого числа n, что произойдёт? Обычно bn–1 ≡ 1 (mod n) обеспечивается теоремой Ферма, а (n – 1) будет чётным, так что мы можем записать b(n–1)/2 = x. Так как х2 ≡ 1 (mod n) и n является простым числом, что даёт х ≡ ±1 (mod n). Если у нас +1 и, если (n – 1)/2 остаётся чётным, тогда мы можем продолжить представление b (n–1)/4 = y, и так как у2 ≡ 1 (mod n), то у нас снова будет у ≡ ± 1 (mod n). Таким образом, продолжая в этом направлении, мы приходим либо к вычету (–1) или нечётному показателю степени (или одновременно и тому и другому на одном шаге), и после мы останавливаемся. (Если х2 ≡ 1 (mod n), где n – простое число, то не существует достаточно полезного предсказания конечного результата по х). Заметим, что для заданного простого числа n количество шагов для достижения вычета (–1) может сильно различаться для различных значений b. Например, для n = 257, мы получим 2(n–1)/r ≡ 1 (mod n) для r = 1, 2, 4, 8, 16, 32, в то время как вычет будет (–1) для r = 64. С другой стороны, для того же самого n 3(n–1)/r ≡ 1 (mod n) для r = 1, но вычет (–1) будет для r = 2. Конечно, это означает, что для b = 2 значительно меньшая степень 2, чем 59
(n – 1)st, будет сравнимой с 1 по mod n. Об этом явлении будет сказано в следующей главе, когда будут рассматриваться порядки чисел по модулю n. Для степени 3, с другой стороны, действительно нет степени меньше, чем (n – 1)st, которая сравнима с 1 по mod n. Назовём 3 примитивным корнем по модулю n. Ясно, что достаточно трудно замаскировать составное число под простое на всех шагах, как это соответствует минимальным требованиям заключения теоремы Ферма (первый шаг). Например, 341 и 561 являются оба составными и они раскрывают свои свойства во время вышеприведённых вычислений на стадиях (в) и (г). C другой стороны, 25 и 2047 (= 23 × 89) оба являются составными, но они маскируют себя под простые числа на стадиях вышеприведённых вычислений (а) и (б). Последовательность вычислений, описанная выше, называется тестом Миллера (1976 г.). Составные числа, проходящие через этот тест, как простые, называются сильно псевдопростыми по основанию b. Рассмотрим более основательно эти числа. Все сравнения будут по модулю n, и используем обозначение 〈 х〉 для наименьшего положительного вычета числа х (mod n). 16.1. Тест Миллера по основаию b. Пусть n будет нечётным положительным целым числом > 1, и пусть b будет взаимно простым с n. Шаг 1: Пусть k = n – 1, 〈 bk〉 = r. Если r = 1, то продолжаем, в противном случае, n не выдерживает теста. Пока k является чётным и r = 1, повторять следующее: Шаг 2: Заменить k на k/2 и заменить r на новое значение 〈 bk〉 . Когда k при проверке оказывается нечётным числом или r, не равным 1, то: если r = 1 или n – 1, тогда n проходит тест. Если r ≠ 1 и r ≠ n – 1, тогда n не проходит тест. 16.2. Определение. Если n – составное число и проходит тест Миллера по основанию b, тогда n называется сильным псевдопростым числом по основанию b. Мы надеемся, как следует из проведенного выше обсуждения, если n – простое число и n не делит b (так что (b, n) = 1), тогда n всегда пройдёт тест Миллера по основанию b. Решающим фактом будет то, что х2 ≡ 1 (mod n), что предполагает х ≡ ≡ ±1 (mod n), когда n является простым числом, так что не может появиться вычета другого, кроме ±1 (т. е., 1 или n – 1), а тест Миллера не сможет его отбросить. Конечно, шаг 1 точно соответствует теореме Ферма. Зарегистрируем этот факт следующим образом:
60
16.3. Теорема. Если тест Миллера даёт отрицательный результат по основанию b, тогда n – составное число.
Заметим, что расчёты, произведённые в начале данного раздела, показывают, что 25 является сильным псевдопростым числом по основанию 7, а 2047 будет сильным псевдопростым числом по основанию 2. 16.4. Упражнения 1. Пусть n будет нечётным числом, n ≥ 3. Почему n всегда будет проходить тест Миллера по основанию n – 1? [В сравнении по модулю n, (n – 1) может быть заменен на (–1)]. 2. Предположим, что, выполняя rтест Миллера над n по основанию b, мы ( n −1) / 2 ( n −1) / 2r +1 получили для некоторого r ≥ 0, b ≡ 1 (mod n), но c = b не сравнимо r+1 с 1(mod n), где 2 | n – 1. Почему по основанию b тест Миллера для числа n даёт отрицательный результат? Покажите, что (c – 1, n) является собственным делителем n. [Вы должны доказать, что делитель не равен 1 и n]. В примере (в) в начале этого раздела для с = 32, n = 341 получено (c – 1, n) = 31, в то же время в примере (г) (c – 1, n) = 33. Этот метод обеспечивает нахождение собственных делителей любого псевдопростого числа n по основанию b (где (b, n) = 1), для которого тест Миллера по основанию b даёт отрицательный результат. (Конечно, даже если bn–1 ≡ с не сравнимо с 1 (mod n), тогда (c – 1, n) является собственным делителем n). 16.5. Программа теста Миллера. Необходимо реализовать тест Миллера в виде программы для ЭВМ. Замечание. Как следует из вышеизложенного, мы считаем, что у Вас имеется программа, включающая алгоритм Хэда. Если это не так, тогда вычисления с модулями, большими, чем корень квадратный из машинной точности (более, чем 109 для повышенной точности), будут сделаны с ошибками. 16.6. Компьютерные упражнения 1. Проверьте, что n = 1 373 653 проходит тест Миллера по основаниям 2 и 3. Теперь проверьте, что n – составное число, используя соответствующую программу. Следовательно, n является сильным псевдопростым числом по основаниям 2 и 3. (Оно будет наименьшим). Проверьте, что n не выдерживает теста Миллера по основанию 5; действительно, оно не является чётным псевдопростым числом по основанию 5; отрицательный ответ на тест Миллера получается на шаге 1. Однако, если 5n–1 ≡ c (mod n), тогда (c – 1, n) = 829 собственный делитель n. (Сравните с вышеприведённым в п. 16.4 (2)). 2. Проверьте, что n = 25 326 001 является сильным псевдопростым числом по основаниям 2, 3 и 5 (они наименьшие). Проверьте, что n не является четным числом, псевдопростым по основанию 7, но, несмотря на это, 61
7n–1 ≡ c (mod n) даёт (c – 1, n) – собственный делитель n. (Сравните с вышеприведённым п. 16.4 (2)). 3. Убедитесь, что следующие числа проходят тест Миллера по основаниям 2, 3 и 5: (а) 14 386 156 093, (б) 15 579 919 981, (в) 18 459 366 157, (г) 19 887 974 881, (д) 21 276 028 621. Применяя тест Миллера по основанию 7 к n, равному каждому из (а), (б) и (г), найдите (как в вышеприведённом п. 16.4 (2)) с, для которого c2 ≡ 1 (mod n). [Это с является последним вычетом, найденным тестом Миллера]. Найдя (c – 1, n), определите собственный делитель n. Даёт ли он собственный делитель для (в) и (д)? 4. Имеем несколько чисел, которые являются сильными псевдопростыми числами по основаниям 2, 3 и 5. Проверьте, могут ли они факторизоваться как выше, в п. (3), используя основание 7 (или, возможно, 11): (а) 1 157 839 381, (б) 3 215 031 751, (в) 3 697 278 427, (г) 5 764 643 587, (д) 6 770 862 367. Cчитая, что Вы можете факторизовать (б), покажите, что оно тоже является числом Кармайкла. 5. Используйте тест Миллера, чтобы показать, что числа k ⋅ 108 + 1, 1 ≤ k ≤ 12, являются все составными, за исключением, возможно, k = 6 и k = 7. (Для некоторого k, например, k = 2 тест Миллера особенно необходим!). 6. Используйте тест Миллера (или что-нибудь другое, что придёт в голову) на числах от 5 000 000 до 5 000 100 для нахождения простого числа. Используйте тест Миллера для нахождения первого числа > 5 ⋅108, которое могло бы быть простым. 16.7. Проект. Приспособьте программу теста Миллера для измерения числа шагов до точки, где тест заканчивается (в результате получения нечётного показателя степени или вычета, отличного от 1 или n – 1). Теперь попробуйте простые числа одно за другим из файла и выберите фиксированное основание b, например, 2. Измените программу таким образом, чтобы она выдавала на печать простое число р, для которого количество шагов в тесте Миллера наибольшее среди некоторого количества предыдущих простых чисел. Например, когда b = 2, Вы можете найти, что тест Миллера для р = 2 имеет один шаг, для р = 3 имеет три шага, для р = 17 имеет три шага (а именно, 216 ≡ 1, 28 ≡ 1, 24 = 16 ≡ –1 (mod 17)), для р = 73 имеет четыре шага, для р = 257 имеет шесть шагов (так что наименьший р, имеющий семь шагов, более 257), р = 6529 имеет восемь шагов. Как было указано ранее, большое количество шагов показывает, что наименьшей степенью b по сравнению с (n – 1)st будет ≡ 1 (mod n). 16.8. Проект. Найдите все сильные псевдопростые числа по основанию 2, которые меньше, чем 10 000. Обеспечьте, чтобы в этом списке от62
сутствовали простые числа! (Вы должны найти точно пять сильных псевдопростых чисел). 16.9. Проект. Напишите программу, чтобы показать, что наименьшее число, которое является и сильным псевдопростым числом по основанию 2, и числом Кармайкла, будет 15 841. 16.10. Проект. Существует простое исследование, которое делает программу теста Миллера более элегантной. Пусть двоичное представление (n – 1) выглядит как dk dk-1 . . . d1 d0, где каждое di будет 1 или 0, а dk = 1. Тогда 1) число (n – 1) будет чётным, если d0 = 0; 2) при этом условии двоичное представление для (n – 1)/2 будет dk dk-1 . . . d1. Вставим это в программу теста Миллера. (Делает ли это изменение выполнение программы более быстрым?). 17. Вероятностное тестирование на простоту
Как было показано ранее, наименьшим для системы сильных псевдопростых чисел по основаниям 2, 3 и 5 есть 25 326 001. Таким образом (используя этот результат), любое число, меньшее, чем 25 326 001 может быть либо простым, либо составным, что нужно учитывать для максимум трёх применений теста Миллера. Мы здесь не предлагаем следовать этому методу доказательства принадлежности к простым числам, так как существуют и другие интересные методы, которые не требуют нахождения системы наименьших псевдопростых чисел по выбранным основаниям. Однако важно отметить, что в некотором смысле большинство тестов Миллера (по различным основаниям), по которым прогоняются числа, «выглядят пригодными» для нахождения простых чисел. 17.1. Теорема. Пусть n будет нечётным и составным. Тогда n проходит тест Миллера, минимум, по (n – 1)/4 основаниям при условии 1 ≤ b ≤ n – 1. Заметьте, теорема говорит о том, что отсутствует «строгая» аналогия с числами Кармайкла: n никогда не может быть сильным псевдопростым числом по любому основанию. Непрактично проверять по (n – 1)/4 основаниям, когда n велико, но можно неформально рассудить таким образом: дано целое число n и выбрано «случайное» основание b из диапазона 1 ≤ b≤ n – 1. Предположим, что n проходит тест Миллера по основанию b. Вероятность того, что для составного числа n пройти тест по одному из вы1 , так что вероятность того, что число 4 1 n является составным не превышает . (Ясно, что, при самом плохом выбо4
бранных оснований b, не превышает
ре, b будет либо 1, либо n – 1. См. выше, п. 16.4 (1)). Более того, если мы 63
последовательно выполним тест Миллера по k различным основаниям, вероятность того, что прошло тест составное число, будет 1/4k. Таким образом, наша уверенность в том, что прошедшее тест число простое, возрастает в k раз. Действительно, представленный метод, известный как вероятностный метод выбора простых чисел Рабина, обычно используется для нахождения очень больших «вероятных простых чисел», записываемых 50 цифрами, а k бывает около 100. В своей оригинальной работе (1976 г.) Миллер показал, что, используя догадку, называемую обобщенной гипотезой Римана, составное число n не проходит теста по основанию < 2(ln n)2. Например, если n – составное число, приблизительно 1050, то это означает, что достаточно приблизительно 27 000 тестов Миллера, чтобы установить это. 17.2. Компьютерные упражнения 1. Приспособьте программу теста Миллера таким образом, чтобы она делала, скажем, 10 случайных выборов основания b (1 ≤ b ≤ max) для числа max, которое вводится вместе с n. Таким образом, Вам необходимо добавить max и переменную расчетов, например, test в объявление VAR: max, test : integer; и программа сосчитает n и max ранее, чем n и b. Вставьте Randomize; после объявления readln и вставьте цикл FOR (test:= 1 to 10), чтобы повторить тест 10 раз. Основание будет выбираться по команде
base := Random (max – 1) + 2, которая выбирает его среди случайных чисел, удовлетворяющих неравенству 2 ≤ b ≤ max. Теперь применим многократный тест Миллера к примерам пп. 16.6 (5) и (6), чтобы показать, останется ли «вероятное простое число» таким же после удлинённого теста. Вы, конечно, могли бы выбрать n – 1 (или n – 2) для max, но практически достаточно 100. 2. Найдите «вероятное простое число» вида n = r4 + 1, где 1900 ≤ r ≤ 2000. (Мы увидим далее, что для числа n, где n – 1 может достаточно просто разлагаться на сомножители, существует хороший метод для доказательства того, что n действительно является простым числом). 3.* Предполагая, что количество простых чисел вида r4 + 1, где 1 ≤ r ≤ R, удовлетворяет выражению R
dx , ln x 2
Q( R) = λ ∫
для больших R, где λ является константой. Принимая, что всё это выполнено, и, используя результаты п. (2), оцените значение λ.
64
18. Функция Эйлера 18.1. Определение. Пусть n ≥ 1 и пусть φ(n) будет количеством целых чисел х, удовлетворяющих неравенству 1 ≤ х ≤ n и (x, n) = 1. Функция φ называется функцией Эйлера, или функцией количества положительных целых чисел, взаимно простых с n. 18.2. Примеры. Ясно, что φ(1) = 1, φ(2) = 1. Для некоторого n > 2 числа 1 и n – 1 будут взаимно простыми с n, так что φ(n) ≥ 2. Если р – простое число, тогда все числа 1, 2, . . . , р – 1 будут взаимно простыми с р и, следовательно, φ(р) = р – 1. Обратно, если n – составное число и больше 1, тогда оно имеет некоторый делитель d, 1 < d < n, который не будет взаимно простым с n. Следовательно, φ(n) < n – 1. Следовательно, φ(n) = n – 1, если и только если n будет простым числом. Числа х, имеющие степени простого числа ра, для которых 1 ≤ х ≤ ра и (х, ра) = 1, точно являются числами, которые не кратны р. Кратными р будут р, 2р, 3р, . . . , ра–1р, количество которых равно ра–1. Итак, ⎛ 1⎞ φ ( р а ) = р а − р а −1 = р а ⎜1 − ⎟ . р⎠ ⎝
Теперь попробуем найти общую формулу для нахождения φ(n). Сделаем это на основе последнего примера п. 18.2 и следующего результата. 18.3. Теорема. Функция φ является мультипликативной, т. е., если (m, n) = 1, тогда φ(mn) = φ(m)φ(n). 18.4. Следствие. Если n = p1n1 p2n2 ... pknk является разложением числа n по степеням простых чисел (так что pi являются различными простыми числами и каждое ni > 1), тогда ⎛
φ(n) = p1n ⎜⎜1 − 1
⎝
1 ⎞ n2 ⎛ 1 ⎞ nk ⎛ 1 ⎞ ⎛ 1 ⎞⎛ 1 ⎞ ⎛ 1 ⎞ ⎟ р2 ⎜1 − ⎟...рk ⎜⎜1 − ⎟⎟ = n⎜⎜1 − ⎟⎟⎜⎜1 − ⎟⎟...⎜⎜1 − ⎟⎟ . р1 ⎟⎠ ⎜⎝ р2 ⎟⎠ ⎝ рk ⎠ ⎝ р1 ⎠⎝ р2 ⎠ ⎝ рk ⎠
18.5. Упражнения 1. Составьте таблицу значений функции Эйлера φ(ра) для малых простых чисел р и целых чисел а ≥ 1 и, используя мультипликативное свойство, найдите все значения n, для которых φ(n) = 6. (Более ценным упражнением было бы найти все n для φ(n) = 48; оно имеет не менее 11 решений). Покажите также, что не существует n, для которого φ(n) = 14. Полезным замечанием будет то, что, если р – простое число и p | n, тогда (p – 1) | φ(n). Оно управляет достаточно большим количеством простых делителей n. (Поэтому 14 не является значением φ(n), иногда оно называется неполным числом. 65
Действительно (более трудное упражнение), φ(n) никогда не принимает значений 2 ⋅ 7k, k ≥ 1. См. ниже, п. 18.13). 2. Найдите разложение по степеням простых чисел 10! и, отсюда, найдите φ(10!). 3. Покажите, что для некоторого n > 2 φ(n) является чётным. [Подсказка. Либо n = 2k для некоторого k > 1, или p | n для некоторого нечётного простого числа р. Это также можно обнаружить, заметив, что для n > 2, числа х взаимно простые с n и, удовлетворяя 1 ≤ x ≤ n, могут быть поделены на пары {x, n – x} различных чисел]. 4. Представив n = 2kr, где r – нечётное число, покажите, что если φ(n) = n/2, то n является степенью 2. 5. Используйте формулу для φ(n), чтобы описать все n, для которых φ(n) является кратным 4. (Например, если 8 | n, тогда 4 | φ(n)). 6. Предположим, что n – составное число. Покажите, что φ(n) ≤ n – n . [Подсказка. Если n – составное число, тогда оно имеет простой сомножитель р ≤ n . Какое число, кратное р, будет ≤ n ?]. 7.* Покажите, что, если φ(n) = 2 ⋅ 36k+1, где k ≥ 2, тогда n = 36k+2 или n = = 2 ⋅ 36k+2. [Достаточно трудно проверить, что для этих значений n, φ(n) имеет установившееся значение. Этот сложный случай следует показать путем преобразований]. Как следует из этого, существует бесконечно много значений у, для которых уравнение φ(х) = у имеет точно два решения для х. Что удивительно, неизвестно, существуют ли какие-нибудь значения у, для которых φ(х) = у имеет точно одно решение для х. 8. Проверьте, что, если n = 1 или n = 2i, или n = 2i 3j для целых чисел i ≥ 1, j ≥ 1, тогда φ(n) является делителем n. 9. Это модификация п. 8, и она несколько сложнее. Действительно, примем φ(n) | n и n > 1. Пусть Р будет произведением всех различных простых чисел р, делящих n, а Q будет произведением сомножителей р – 1 для всех таких р. Покажите, что Q | P, и докажите, что Q не делится ни на какой квадрат > 1 и что Р может быть только произведением одного или двух простых чисел. Выведите из этого, что нет простых чисел р > 3, которые могли бы быть сомножителями Р и, отсюда, что в действительности n имеет одно значение, приведённое выше, в задании (8). 10. В противоположность п. 18.3 покажите, что если m | n, тогда φ(тn) = mφ(n). (Используйте п. 18.4). 11. Покажите, что если n – нечётное число и φ(n) = 2r для некоторого r ≥ 1, тогда n должно быть произведением различных простых чисел. Используя тот факт, что 232 + 1 не является простым числом, покажите, что не существует нечётного числа n, для которого φ(n) = 232. С другой стороны, для 1 ≤ r ≤ 31 должны существовать нечётные числа n, для которых φ(n) = 2r. Что представляют собой чётные числа n, для которых φ(n) = 232? 66
[Получается, что наименьшее число у, для которого φ(n) = у, имеет чётное решение для n, но отсутствует нечётное решение у = 29 × 2572 = 33 817 088]. 18.6. Компьютерное упражнение. Напишите программу, основанную, возможно, на программе пробного деления, чтобы вычислять φ(n) для данного n. Существует несколько путей для выполнения этого, один из которых основывается на формуле п. 18.4. Т. е. φ начинается с 1, а пробное деление протекает, как описано перед этим. Для каждого простого числа р, являющегося делителем n, когда наивысшая степень х = ра делителя n найдена, значение φ умножается на х(р – 1)/р. Вы только планируете выполнить этот последний шаг, когда действительно р является одним из простых чисел, которое может быть найдено только делением n. (Альтернативно инициализируем φ по n и умножаем на (р – 1)/р, если каждое простое р является делителем n). Проверьте, что Ваша программа работает с проверкой малых значений n; также проверьте, что φ(5186) = φ(5187) = φ(5188) = 2592 (довольно редкий пример!). Другая редкость – это φ(25 930 + 5k) = 27 · 34, для k = 0, 1, 2. Действительно существует другое число, не на много большее, чем 25 940, которое имеет то же самое значение для φ; можете Вы найти его? 18.7. Проект. Используйте программу для вычисления φ, чтобы найти при различных значениях n среднее значение φ(k)/k для k = 1, 2, . . . , n. (Это сумма значений, разделённых на n). Существует теоретическая оценка для этого среднего значения вида 6/π2 + М (ln n/n), где М является константой. Оцените величину М. 18.8. Упражнение: nφ(n) определяет n. Как следует из п. 18.5, существует много n, для которых φ(n) имеет заданное значение. Странно, однако, что если nφ(n) = mφ(m), тогда неизбежно n = m. Представим основание для доказательства этого. Сначала докажите из формулы для φ(n), что, если р является наибольшим простым числом, делящим nφ(n), тогда р также является наибольшим простым числом, делящим n. Предположим, что nφ(n) = = mφ(m), докажите, что р является также наибольшим простым числом, делящим m, и, кроме того, степень р, на которое делится каждая часть уравнения – нечётная, скажем, p2r–1, где pr является степенью р, на которую делятся оба m и n. Таким образом, n = pr N и m = pr M, где p не делит N и р не делит M. Теперь используем данное уравнение, чтобы доказать, что Nφ(N) = = Mφ(M). Это сокращает число различных простых сомножителей до одного и, в конце концов, сводит задачу к доказательству того, что если n = pa и m = qb для простых чисел р и q, тогда nφ(n) = mφ(m) означает, что p = q, a a = b, т. е., n = m. (Почему невозможно выставить все простые сомножители в одной части уравнения перед тем, как Вы выставите их на другой стороне?). 67
Определите единственные значения n, при которых nφ(n) имеет следующие значения: 20, 12, 42, 40, 500, 1000, 10 100, 100 000, 9 003 000. 18.9. Проект. Напишите программу, которая для заданного целого числа k > 0 либо показывает, что отсутствует число n, для которого nφ(n) = k, либо найдётся единственное n с таким свойством, используя п. 18.8. Таким образом, Вы начнёте с нахождения наибольшего простого делителя р у k, и, определения наивысшей степени р числа, делящего k. Если степень будет чётной, тогда Вы докажете, что такого числа n не существует. Если степень будет p2r–1 , тогда Вы обратите внимание на делитель в n и замените k на k/prφ( pr). Конечно, если последнее не является целым числом, то такого n не существует. 18.10. Проект. Неизвестно, существует ли бесконечно много n, для которых φ(n) = φ(n + 1). Найдите все значения n < 10 000, для которых это выполняется. Найдите также значения n < 10 000, для которых φ(n) = = φ(n + 3). (Их существует достаточно мало!). 18.11. Проект: повторное применение функции Эйлера. Покажите, что, последовательность, образованная из n, φ(n), φ2(n) = φ(φ(n)), φ 3(n) =φ(φ(φ(n))), . . . , в конце концов становится равной 2. Для n > 2 пусть классом C(n) из n будет значение k, для которого φ k(n) = 2. Вычислите точное значение С(2r) и С(2 ⋅ 3r). Теперь, для заданного значения k требуется найти наименьшее значение n, которое имеет класс k. Напишите программу для иллюстрации того, что для k = 1, 2, 3, 4, 5, 6 наименьшими n будут (соответственно) n = 3, 5, 11, 17, 41, 83. Как продолжить последовательность малых n? Содержит ли она только простые числа? Несколько расширим знания о свойствах этого класса с помощью следующих упражнений. 18.12. Упражнения: некоторые свойства класса C(n) Некоторые из них сделаны на основе наблюдения, что, пока φ(mn) = = φ(m)φ(n), когда (m, n) = 1, мы получим φ(mn) = mφ(n), когда m | n. Вспомните, что также φ(n) является чётной для n > 2 (см. выше, п. 18.5 (3)). Мы примем n > 2. 1. Когда n – нечётное и (2, n) = 1, мы получим φ(2n) = φ(n). Докажите, k что φ (2n) = φ k(n) для всех k и, следовательно, C(2 n) = C(n). 2. Когда n – чётное, и 2 | n, мы получим φ (2n) = 2φ (n), и, так как φ k(n) является чётным, мы получим φ 2(n) = 2φ 2(n). Докажите, что φ k(2n) = 2φ k(n), если φ k–1(n) является чётным и, отсюда, k ≤ C(n). Докажите, что φ С(n)(2n) = 4, а C(2n) = C(n) + 1. 68
3. Используйте задания (1) и (2), чтобы показать, что если n – нечётное, тогда С(2r n) = С(2r-1 n) + 1 = . . . = C(2n) + r – 1 = C(n) + r – 1. Заметим, что это означает, что C(2r n) = C(n) + C(2r). 4. Используйте задания (1) и (2), чтобы показать, что если n – чётное, тогда С(2r n) = С(2r1 n) + 1 = . . . = C(n) + r. Заметим, что это означает, что C(2r n) = C(n) + C(2r) + 1. 5. У нас φ (3n) =3φ (n), или 2φ (n), соответственно 3 не делит n или 3 | n. Используйте это, чтобы показать, что, для k ≤ C(n), φ k(3n) = 2φ k(n) или 3φ k(n). Докажите, что φ С(n)(3n) =4 или 6, и что С(3n) = C(n) + 1 = C(n) + C(3). Доказано, что С(pn) = C(n) + C(p) для некоторого нечётного простого числа р. Возможно Вы хотите также попробовать это для р = 5. Из полученных ранее результатов теперь следует, что С(mn) = C(n) + C(m), несмотря на то, что оба m и n являются чётными числами, в каждом случае мы добавляем 1 в правую часть. (Удобно определить С(2) = 0, чтобы закрыть все случаи). Если у Вас имеются экспериментальные данные из вышеприведённого п. 18.11, тогда Вы сможете сравнить их с Вашими результатами. 18.13. (Компьютерное?) упражнение. Определить все числа n ≤ 100 (или ≤ 1000, если Вы сможете), которые не охватываются теоремой Эйлера, т. е., которые не равны φ(n) для некоторого n. Существует ли лучший метод, чем составление таблицы значений φ(ра) для ра ≤ 101 (или ≤ 1001) и получения всех возможных произведений этих значений для различных простых чисел, которые ≤ 100 (или ≤ 1000)? Сравните с п. 18.5 (1). Конечно, все нечётные числа > 1 не являются эйлеровыми (сравните с п. 18.5 (3)). Чётными неэйлеровыми числами ≤ 200 будут 14, 26, 34, 38, 50, 62, 68, 74, 76, 86, 90, 94, 98, 114, 118, 122, 124, 134, 132, 146, 152, 154, 158, 170, 174, 182, 186, 188, 194. 18.14. Проект. Если мы поменяем знаки минус на плюс в формуле для φ (п. 18.4), мы получим новую функцию: k 1 1 1 φ (n) = n ⋅ (1 + ) ⋅ (1 + ) ⋅ ... ⋅ (1 + ) = ∏ piαi −1 ( pi + 1), p1 p2 pk i =1 где, как и ранее, pi – это различные простые числа – делители n. Действительно, для pi > 2, простым сомножителем pi +1 будет 2, а простые числа должны быть меньше pi, чтобы показать, что итерация φ ( т. е., n, φ (n) ,
φ (φ (n)) , . . .) даёт в конечном счёте число вида 2а 3b, которое затем становится 2а + 1 3b, 2a + 2 3b и т. д. Напишите программу, которая вычисляет φ и число шагов, необходимых, чтобы достичь вида 2а 3b. Почему число шагов совпадает для n, 2n и 3n (n ≥ 1)? Проверьте следующую догадку: если n требуется больше шагов для достижения вида 2а 3b, тогда требуются все числа < n, а n будет простым 69
числом. (Первые n, требующие 1, 2, 3, 4, 5, 6, 7 шагов будут 5, 13, 37, 73, 673, 1993, 15 013, соответственно). 18.15. Проект. Было доказано Р. Е. Дресслером в 1970 г., что если N(x) = # {n > 0: φ(n) ≤ x}, тогда N(x)/x → A, когда х→ ∞, где А – некоторая константа. Оцените значение А. [Теоретическое значение А приблизительно равно 1,94]. 19. Теорема Эйлера и понятие порядка 19.1. Теорема Эйлера (1760). Пусть n > 0, и предположим, что (a, n) = 1. Тогда aφ(n) ≡ 1 (mod n). 19.2. Компьютерное упражнение. Так как a ⋅ aφ(n)–1 ≡ 1 (mod n), то отсюда aφ(n)–1 является числом, обратным а по mod n (инверсией). Используя этот вывод и программу для расчета φ, напишите программу решения линейного сравнения ax ≡ b (mod n), где (a, n) = 1. Как Вы могли бы изменить это условие, чтобы решить такое сравнение без допущения, что (a, n) = 1? 19.3. Упражнения 1. Используя теорему Эйлера, покажите, что из сравнения 40 а ≡ 1 (mod 100) обеспечивается (а, 100) = 1. Докажите, что 7400 – 3400 делится на 100. А делится ли оно на 1000? Заметьте, что, используя 100 = 22 ⋅ 52 и теорему Эйлера отдельно для 4 и 25, Вы можете доказать, что а20 ≡ 1 (mod 100) для (а, 100) = 1, так как сравнение содержит mod 4 и mod 25. 2. Покажите, что, если (2, а) = (2, b) = 1 и (5, а) = (5, b) = 1, тогда 1000 а – b1000 делится на 10 000.
3. Покажите, что 106(р–1) ≡ 1 (mod 9p) для р – простого > 5. Докажите, что существует бесконечно много целых чисел n, для которых р является делителем числа 11 . . . 1 , содержащего n единиц в десятичной системе. Будет ли это справедливо для р = 3? 4. Пусть n = rs, где r > 2, s > 2 и (r, s) = 1. Вспомните из п. 18.5 (3), что φ(n) – чётная, так как n > 2. Используя теорему Эйлера, покажите, что aφ(r)φ(s)/2 ≡ 1 (mod n). [Подсказка. Рассмотрите mod r и mod s]. В силу мультипликативности функции φ (п. 18.3), это означает, что aφ(r)/2 ≡ 1 (mod n). 5. Пусть α = rπ/s, где (r, s) = 1. Представьте s = 2a b, где а ≥ 0, а b является нечётным числом, и запишите β = 2а α = rπ/b. Используя теорему Эйлера, 2k ≡ 1 (mod b) для k = φ(b), чтобы показать, что cos (2k+1β) = cos (2β). Докажите, что последовательность 70
сos(α), сos(2α), сos(22 α), сos(23 α), . . . имеет только ограниченное число различных членов. Полученный выше результат п. 18.3 (1) показывает, что мы часто имеем меньшую степень а, чем степень φ(n), которая сравнима с 1 (mod n). Действительно, показано, что если n делится на два различных нечётных простых числа, то так всегда происходит для любого числа а, взаимно простого с n. Мы получили достаточное количество информации, чтобы разобрать следующее понятие. 19.4. Определение. Пусть (a, n) = 1. Наименьшее число k > 0, такое что a ≡ 1 (mod n), называется порядком a по mod n. Это записывается как k = ordn a, и мы также скажем, что а имеет порядок k по mod n. Конечно, ordn a ≤ φ(n). Заметим, что если (a, n) > 1 и k > 0, то невозможно для ak быть сравнимым с 1 по mod n. Если а имеет порядок k по (mod n), тогда в некоторых книгах используют выражение «а принадлежит показателю k (mod n)». k
19.5. Теорема. Предположим (a, n) = 1. Тогда ak ≡ 1 (mod n), если и только если ordn a | k. Отсюда степень а, которая сравнима с 1, не только ≥ ordn a, но точно кратна этому порядку. В особенности, ordn a | φ(n) и, если р – простое число, то ordp a | (p – 1). 19.6. Упражнения 1. Пусть n = 12, так что φ(n) = 4. В соответствии с п. 19.5, порядок по mod 12 некоторого числа а, для которого (а, 12) = 1, должен быть 1, 2 или 4. Найдите все возможные порядки. Равны ли они 4? (Обратитесь к п. 19.3 (4)). 2. Покажите, что порядком 2 mod 11 будет φ(11) = 10. Чтобы доказать это, будет достаточно показать, что 2k не сравнимо с 1 (mod 11) для k = 2 и 5, которые являются собственными делителями 10. Что будет порядком 2 mod 22? Покажите, что 7 и 13 оба имеют порядок φ(22) = 10, mod 22. 3. Покажите, что не существует числа а, для которого ord4a = φ(8) = 4. Предсказано ли это в п. 19.3 (4)? Существует ли а с ord4a = φ(4) = 2? Найдите все числа а с ord7a = φ(7) = 6 и все числа b c ord14b = φ(14) = 6. 4. Пусть р будет простым числом, и предположим, что а имеет порядок 3 mod p. (Заметим, что это означает, что 3 | (p – 1), и, так как р должно быть нечётным, из этого следует, что 6 | (p – 1)). Покажите, что а2 + а + 1 ≡ 0 (mod p) и докажите, что (а + 1)6 ≡ 1 (mod p). Покажите, что, в действительности, а + 1 имеет порядок точно 6 mod p. 5. Пусть р будет простым числом и предположим, что a имеет порядок n mod pk и порядок m mod pk –1 , где k ≥ 2. Покажите, что n = m или n = mр. [Сначала покажите, что аn ≡ 1 (mod pk–1) и докажите, что m | n. Тогда используйте, что а m = 1 + λ p k–1 для некоторого целого λ, и биномиальную 71
теорему, чтобы показать, что аmp ≡ 1 (mod pk). Выведите из этого, что n | mp. Результат следует из m | n и n | mp]. 6. Пусть р будет простым числом и предположим, что а имеет порядок n mod p 2 и m mod p. Покажите, что m = n, если и только если а р–1 ≡ 1 (mod p2). [Дело здесь в том, что, если ар–1 ≡ 1 (mod p2), тогда n | (p – 1); теперь используйте результат пункта (5) при k = 2]. Позднее, мы покажем, как, в принципе, мы можем найти те значения, которые удовлетворяют сравнению для заданного значения р. Задавая конкретное а, например, а = 2, достаточно редкий случай для простого числа р удовлетворять сравнению (см. ниже, п. 19.8). 7. Предположим, что р – простое число и ар-1 ≡ 1 (mod p2), а ат ≡ 1(mod p). Покажите, что ат ≡ 1 (mod p2). [Пусть r = ordp a; возьмите р – – 1 = rk и m = rh, ar = 1 + cp. Используйте первую гипотезу, чтобы показать, что p | c, затем возьмите am = (1 + cp)h и используйте биномиальную теорему]. k 8. Предположим, что р – простое число, и р | Fk, где Fk = 22 + 1 является k-м числом Ферма. Покажите, что ordp2 = 2k + 1, и докажите, что 2k + 1 | (p – 1). 9. Пусть (m, n) = (x, m) = (x, n) = 1 и пусть a = ordm x, b = ordn x. Покажите, что хk ≡ 1 (mod mn), если и только если a | k и b | k. Докажите, что ord mn x = HOK (a, b). 10. Пусть a = ordm x и пусть s ≥ 1. Покажите, что ordn (xs ) = равносильно доказательству, что
a . [Это ( a , s)
a s t | t ⇔ (x ) = 1]. (a, s )
19.7. Определение. Число а, для которого (a, n) = 1 и ordh a = φ(n) называется примитивным корнем по mod n. Таким образом, в соответствии с п. 19.3 (4), если n делится на два различных простых нечётных числа, то оно не имеет примитивного корня. Исходя из изложенного в п. 19.6 (3), число 8 не имеет примитивного корня. Для простого числа р условие для а быть примитивным корнем по mod p должно быть ordh a = р – 1. Более подробно примитивные корни разберём позже. 19.8. Проект. Проверьте, что ар–1 ≡ 1 (mod p2), когда а = 5, а р будет одним из простых чисел 20 771, 40 487, 53 471 161. Найдите наименьшее простое число р, для которого это произойдёт, а) когда а = 3, б) когда а = 2 и в) когда а = 11. Найдите другие решения для а < 50. [Существует экстраординарная связь с «последней теоремой Ферма», описанная А. Виферихом p p p в 1909 г. Если x + y = z , где р будет нечётным простым числом, которое не является делителем положительных целых чисел x, y, z, тогда 2p–1 ≡ ≡ 1 (mod p2). Конечно, «последняя теорема Ферма» состоит в том, что не существует решений для р > 2].
72
19.9. Упражнения. Пусть р и q – различные простые числа и предположим, что r является простым делителем для обоих случаев
a = (pq – 1)/(p – 1) = pq–1 + pq–2 + . . . + 1 и b = (qp – 1)/(q – 1) = qp–1 + qp–2 + . . . + 1. 1. Покажите, что если r | (p – 1), тогда a ≡ q (mod r) и докажите, что r = q. Так как q не делит b, это показывает, что r не делит (p – 1) и, аналогично, r не делит (q – 1). 2. Покажите, что, если р = 2, тогда 2q – 1 ≡ q + 1 ≡ 0 (mod r). Докажите, что ordr 2 = q и, следовательно, q | (r – 1). Аналогично p | (q + 1). Докажите, что р > 2 и, аналогично, q > 2. 3. Покажите, что а и b являются нечётными и докажите, что r – нечётное. 4. Используйте pq ≡ 1 (mod r) и п. (1), чтобы показать, что ordr p = q , и докажите, что q | (r – 1). Аналогично для p | (r – 1). Докажите, что r имеет вид 2kpq + 1. 5. Возьмите р = 17 и напишите программу для нахождения наименьшего простого числа q, для которого r = 2pq + 1 является общим кратным a и b, как проделано выше. 19.10. Упражнение: наименьшее общее кратное порядка. Если выбрать два элемента a и b порядков, соответственно, r и s (mod n), то существует простая конструкция для нахождения другого элемента с порядка НОК(r, s) таким образом. Покажите, что существуют числа u, v, x, y, такие, что r = ux, s = vy и (среди прочего) (u, v) = 1 и uv = HOK (r, s). Используйте выражение с ≡ axby (mod n). Требованием является наличие порядка uv. Сначала покажите, что сuv ≡ 1 (mod n), так что порядок является делителем uv. Затем выберите сk ≡ akx bky ≡ 1 (mod n). Увеличьте степень каждой из частей до u и докажите, что s | kuy и, следовательно, v | k; аналогично покажите, что u | k. Докажите, что uv является делителем порядка. 19.11. Упражнение: формула Серпинского – Селфриджа, дающая только составные числа. В 1960 г. Серпинский показал, что существует бесконечно много k, для которых N = k ⋅ 2 n + 1 является составным числом для всех n ≥ 1. В 1963 г. Селфридж показал, что k = 78 557 обладает таким свойством, и Вам даётся шанс, чтобы доказать это. Действительно, Вы можете показать, что N всегда делится на 3, 5, 7, 13, 19, 37 или 73. Например, рассмотрим 7: когда выполняется N ≡ 0 (mod 7)? Так как 78 557 ≡ 3 (mod 7), то получим решение 2n–1 ≡ 1 (mod 7). Краткое вычисление показывает, что ord7 2 = 3, так что, опираясь на п. 19.5, это эквивалентно 3 | (n – 1), т. е., n ≡ ≡ 1 (mod 3). Аналогично рассмотрите 13: когда верно N ≡ 0 (mod 13)? Так как 78557 ≡ –2 (mod 13), то это решение относится к 2n + 1 ≡ 1 (mod 13). Мы нашли, что ord13 2 = 12, так что, используя п. 19.5, мы получим 12 | (n + 1),
73
т. е., n ≡ –1 (mod 12). Аналогичным образом покажите, что 3 | N ⇔ n ≡ ≡ 0 (mod 2); 5 | N ⇔ n ≡ 1 (mod 4); 19 | N ⇔ n ≡ –3 (mod 18); 37 | N ⇔ n ≡ ≡ –9 (mod 36) и 73 | N ⇔n ≡ 3 (mod 9). Теперь проверьте, что каждое n покрывается, по крайней мере, одним из семи сравнений (проверьте в случае mod 36). 19.12. Проект: замкнутые многоугольники. Мы начнём с теоретических вычислений. Пусть р будет нечётным простым числом, k ≥ 2, и пусть n, m будут порядками 2 mod pk и mod pk–1, соответственно (сравните п. 19.6 (5)). Мы предполагаем, что n ≠ m. 1. Утверждаем, что для любого t ≥ 0, 2t + pk–1 является mod рk степени 2. Это показывает, что действительно добавка pk–1 меняет порядок степеней 2 mod pk [Почему?]. Докажем это высказывание, используя следующие подсказки. Возьмём 2m = 1 + hp k–1 и увеличим степени каждой части до, скажем, s c помощью биномиальной теоремы. Используйте n ≠ m, чтобы показать, что p не делит h, и докажите, что для подходящего s 2ms ≡ 1 + pk–1 (mod pk). Это подтверждает требование для t = 0. Теперь увеличим каждую сторону последнего сравнения до степени r. Покажите, что существует такое r, что 2msr+t ≡ 2t + pk–1 (mod pk). Это доказывает главное утверждение. 2. Пусть α будет углом 2πr/pk (те же р и k, что и ранее, но с новым r), где p не делит r. Пусть v0 будет некоторый ненулевой вектор и пусть vs будет v0, повёрнутым против часовой стрелки на угол sα для некоторого целого s. Мы рассматриваем векторы w0, w1, w2, . . . , где w0 = v0, w1 = (w0, повёрнутому на α) = v1, w2 = (w1, повёрнутому на 2α) = v3, w3 = (w2, повёрнутому на 4α) = v7 и т. д. В общем случае, wi = vj, где j = 2i – 1. Векторы w0, w1, w2, . . . могут быть расположены, последовательно соединёнными своими концами, образуя многоугольную линию (см. рисунок 3): (внешний) угол между двумя рёбрами удваивает предыдущий угол между двумя рёбрами. Покажите, что если n – порядок 2 mod pk, то wn = w0 (как векторы, т. е. они параллельны). Целью является доказать, что в нотации пункта (1) при m ≠ n, многоугольник замыкается после n изображённых сторон, т. е., W = w0 + w1 + . . . + wn-1 = 0. Примем обозначение ρk для вращения векторов на угол kα и покажем, используя (1), что ρс+1 W = ρW, где с = рk–1. Докажите, что W = 0, как требуется.
74
W3 4α
W2 2α
W1
α W0
Рис. 3 3. Если Вы знаете, как написать графические программы, то попробуйте изобразить многоугольник для различных значений р и k, проверяя результат пункта (2), а также постарайтесь оценить насколько редки случаи, когда при m = n многоугольник невозможно замкнуть. 20. Тесты на простоту
Главное применение идеи порядка мы сделаем здесь для тестирования выбранных целых чисел на простоту. Вообще говоря, результаты проверки на простоту числа n зависят от возможности представить число в виде произведения некоторых чисел, близко расположенных от n, например, п ± 1. Представим образец, который даёт представление теоремы Ферма в очень специфическом случае. 20.1. Теорема (простота 2р + 1). Предположим, что р – простое число и пусть n = 2p + 1. Если 2n-1 ≡ 1 (mod n) и 3 не делит n, тогда n будет простым числом.
75
20.2. Компьютерное упражнение: цепи Каннигхэма простых чисел Проверьте, что р1 = 1 122 659 является простым числом путём пробного деления. Сколько членов содержит последовательность р1, р2 =2 р1 + 1, р3 = 2 р2 + 1, . . . простых чисел? Вы, конечно, можете проверить принадлежность чисел ряда к простым пробным делением, но, вместо этого, попытайтесь использовать п. 20.1. Такие ряды простых чисел называются цепями Каннигхэма. Существуют две другие длинные цепи, начинающиеся с 2 164 229 и 2 329 469. 20.3. Упражнения 1. Используйте метод, аналогичный п. 20.1, чтобы показать, что если р является простым числом и 2р ≡ 1 (mod 2p + 1), тогда 2р + 1 будет простым числом. Как этот результат связан с п. 20.1? Будет ли аналогичным результат для ap-1 ≡ 1(mod 2p + 1) для некоторого другого основания а? 2. Пусть р будет нечётным простым числом и n = ap + 1, где а – чётное число, 2 ≤ n < p . Предположим, что 2n-1 ≡ 1 (mod n) и (2а – 1, n) = 1. Покажите, что для некоторого простого числа q, на которое делится n, что порядок 2а mod q будет равен р, и докажите, что p | (q– 1). Теперь покажите, что q > n , и докажите, что n – простое число. Результат может быть использован для анализа цепей простых чисел вида р1, р2 = а р1 + 1, р3 = а р2 + 1, . . . Интерпретация теоремы 20.1. Предположим, что n удовлетворяет заключению теоремы Ферма, т. е., n является либо простым, либо псевдопростым числом по основанию а. Предположим также, что a (n–1)/ q не сравнимо с 1 для делителя q числа n – 1 (в случае п. 20.1, q = p, так что (n – –1)/q = 2). Тогда n будет простым числом. Наиболее полезный общий результат рассматриваемого плана был сформулирован Е. Лукасом в немного более слабой форме в 1891 г., но доказан Д. Г. Лемером в 1927 г. 20.4. Теорема (тест на простоту числа (n – 1) над q, или тест Лукаса) Предположим, что аn-1 ≡ 1 (mod n), но для любого простого числа q, которое делит (n – 1), мы будем иметь а(n-1)/q не сравнимо с 1 (mod n). Тогда n будет простым числом. 20.5. Компьютерные упражнения 1. Используйте тест Миллера, чтобы показать, что n = k ⋅ 108 + 1 является составным числом для 1 ≤ k ≤ 12 , за исключением, возможно, k = 6 и k = 7. Теперь используйте тест Лукаса, чтобы показать, что k = 6 и k = 7 должны дать простые числа. Вспомните, что Вы должны испытать несколько различных оснований перед тем, как найдёте нужное. [Конечно, этого довольно мало, чтобы проверить также и пробным делением предложенные Вами аргументы на работоспособность для чисел < 1010]. 76
2. Найдите все значения k, 1 ≤ k ≤ 70, для которых k ⋅ 1012 + 1 является простым числом. (Итак, начнём с теста Миллера, чтобы сократить большую часть значений k). Вы найдёте k = 18, которое по основанию а = 7 обеспечит это. Следующим будет k = 63, и несколько проще здесь использовать тест Лукаса и найти различные основания для различных простых чисел qi = 2, 3, 5, 7. 3. Покажите, что k ⋅ 325 + 1 будет составным для 1 ≤ k ≤ 33, а k = 34, 42 и 70 все дадут простые числа. 4. Пусть n = 1012 + 61. Проверьте, что n – 1 = 22 ⋅ 5 ⋅ 3947 ⋅ 12 667 849 является разложением на простые сомножители n – 1 и, отсюда, покажите, что n – простое число. Также покажите, что 1012 + 63 является простым числом, используя разложение на простые сомножители 1012 + 62. Таким образом, мы нашли пару сдвоенных простых чисел. 5. Представим пример, где используется двухстадийный процесс. Пусть n = 1013 + 37, так что n – 1 = 2 2 m, где m = 25 ⋅ 1011 + 9. Так как m > 1010, покажите, что оно простое тем же самым методом. 6. Проверьте, что 1015 + 36 = 22 ⋅ 7 ⋅ 37 ⋅ 965 250 965 251, и покажите, что последний сомножитель является простым, благодаря факторизации 965 250 965 250 и использования теста n – 1 над q. Отсюда покажите, что1015 + 37 является простым числом. 7. Приведём довольно впечатляющий пример. Для нахождения больших величин основания а для проверки выполнение условия, что а(n–1)/2 не сравнимо с 1 (mod n), потребовалось число n = 26 437 680 473 689. Вы можете проверить, что все числа а < 500 дают а(n-1)/2 ≡ 1 (mod n). (Почему этого достаточно, чтобы убедиться, что а – простое число?). Используйте разложение на простые множители числа n – 1 = 23 ⋅ 32 ⋅ 11 ⋅ 412 ⋅ 89 ⋅ 347 · 643, которое несложно проверить, используя соответствующую программу. Докажите, что n – простое число. 8. Проверьте разложение на простые множители числа n – 1 = 2 · 31 × × 258 629 069 для n = 16 035 002 279 и используйте тест Лукаса, чтобы доказать, что n – простое число. Также проверьте, что 2n + 1 является простым числом, например, используя п. 3.1. Проделайте то же самое для n = 15 048 973 639, разлагая на множители сначала n – 1. 9. Покажите, что n = 30 059 924 764 123 – простое число, используя тест n – 1 над q (в противоположность пункту (8) простое число 2 не вызывает сложностей, в то время, как для числа 3 имеются некоторые проблемы). 10. Определите вероятностные простые числа вида n = r 4 + 1 для 1900 ≤ r ≤ 2000. Выбранные значения должны быть 1900 + k, где k = 10, 16, 26, 32, 34, 42, 44, 48, 52, 56, 62, 72, 78, 86, 94. Найдя простые делители числа (n – 1), мы получаем материал для определения простых сомножителей r. Проверьте все эти числа n, которые на самом деле являются простыми на основе теста n – 1 над q. 77
11. Покажите, что 1+ 8 ⋅ 3 ⋅ 5 . . . 23 = 892 371 481 является простым числом (произведение содержит все простые числа от 3 до 23). 12. Можно показать, что 1027 – 1 = 3 5 ⋅ 37 ⋅ 757 ⋅ 333 667 ⋅ n, где n = 440 334 654 777 631. Используйте программу для факторизации n – 1 (это число имеет только один простой делитель r > 105 и он < 1010) и, отсюда, покажите разложение на простые сомножители числа 1027 – 1. 13. Это достаточно длительное упражнение. Используя тождества a2 – – b2 = (a – b)(a + b) и a3 + b3 = (a + b)(a2 – ab + b2), разложите число 1048 – 1, насколько сумеете, на простые сомножители. Одним из сомножителей будет 1016 – 108 + 1. Докажите, что это простое число с помощью теста n – 1 над q. Отсюда полностью разложите 1048 – 1 на простые сомножители и, следовательно, полностью факторизуете число 11 . . . 1, состоящее из 48 единиц в десятичной форме. Тест n – 1 над q требует знания всех простых чисел, на которые делится n – 1; возможно улучшение этого теста, когда требуется только «большинство» из простых делителей. 20.6. Заключение. (Теорема Прота (Ф. Прот, 1878)) Пусть n = k ⋅ 2m + 1, где m ≥ 2, k является нечётным числом и k < 2m. Предположим, что существует а такое, что an – 1 ≡ –1 (mod n). Тогда n будет простым числом. Предположение, что a(n – 1)/2 ≡ –1 (mod n), не является слишком жёстким: если n является простым числом, тогда степенью будет ± 1 (mod n), и если она равна + 1, то желательно попробовать другое а. Для нечётного простого числа а, что желательно, величина а будет «квадратичным невычетом по mod a». 20.7. Компьютерное упражнение. Используйте теорему Прота и подходящую программу для нахождения простых чисел в следующих рядах: 3 ⋅ 2m + 1, 5 ⋅ 2m + 1, 7 ⋅ 2m + 1, для всех 20 ≤ m ≤ 41. Вы могли бы проверить, являются ли составными числами те, для которых теорема Прота даёт отрицательный результат, используя тест Миллера. (Для первой серии значения m выберите 30, 36 и 41). 20.8. Заключение. Предположим, что n = hpk + 1, где р является нечётным простым числом, а h является чётным, h < p и k ≥ 1. Предположим, что существует а такое, что an – 1 ≡ 1 (mod n) и (a(n–1)/р , n) = 1. Тогда n будет простым числом. 20.9. Проект. Результат п. 20.8 может быть использован для нахождения цепей простых чисел, подобных цепям Каннигхэма (см. выше, п. 20.2). Выбирая k = 1 в п. 20.8 и начиная с р = 3 и h = 2, мы получим, что 2 ⋅ 3 + 78
+ 1 = 7 будет простым числом. Теперь выберем h = 4; мы найдём 4 ⋅ 7 + 1 = 29 является простым числом. Напишите программу, которая находит малые значения h, для которых продолжаются ряды до пределов, определяемых расширенной точностью представления чисел в ЭВМ (2 · 29 + 1 = 59, 12 ⋅ 59 + 1 = 709, . . .). 21. Криптосистема RSA 21.1. Упражнения (вычисления и др.) 1. Если n является произведением двух нечётных простых чисел, n = pq, и если р и q будут приблизительно равны, тогда применим метод, данный Ферма для факторизации n. Это проделывается следующим обраp+q
2
p−q
2
2 2 ⎞ ⎛ ⎞ зом. Заметим, что, n = pq = ⎛⎜ ⎟ – ⎜ ⎟ . Представим это как t – s , ⎝ 2 ⎠ ⎝ 2 ⎠ где s будет малым, а t не должно быть больше, чем n . Начиная с t = [ n ] + 1, мы представим t2 – n и проверим, не является ли оно квадратом; если нет, тогда добавим 1 к t и повторим снова. Когда t2 – n = s2, тогда, конечно, n = (t + s)(t – s). Смысл вышеизложенного, с точки зрения метода двухключевой криптографии, заключается в том, что два простых числа р и q не должны выбираться слишком близкими; реально они различаются на три – четыре цифры, что является достаточным, чтобы сделать метод Ферма непрактичным. Напишите программу, реализующую метод Ферма. Испытайте n = pq, где р = 57 685 933, а q = 57 700 183; попробуйте то же значение р, а q = 58 000 171. Заметьте разницу в количестве шагов для этих двух случаев! Вы можете создать свой пример, используя программу для нахождения простых чисел, близких к выбранным. Вы, может быть, удивитесь, как часто метод заканчивается после одного шага (т. е., при t = [ n ] + 1), когда сомножители р и q совсем близки. Попробуйте представить в виде сомножителей число 22 n = 1 112 470 797 641 561 909 (которое возникает при делении 10 + 1 на относительно малые множители 89 и 101), используя Вашу программу. 2. Представим аргумент для определения для заданного р, насколько велико может быть простое число q > p в случае, когда методу Ферма требуется только один шаг для факторизации n = pq (см. выше, пункт (1)). Значения t начинаются с t = [ n ] + 1, а когда t = (p + q)/2, метод прекращает свою работу и простые множители оказываются найденными. Необходимое количество шагов определяется как
p+q ⎡ ⎤ 1 − ⎣ n ⎦ = ( p + q ) − ⎡⎣ pq ⎤⎦ . 2 2
То есть, <
1 ( p + q ) − pq + 1, когда оно ≤ 2, если и только если 2 79
q2 – 2q(p + 2) + (p – 2)2 ≤ 0. Убедитесь, что данное условие выполняется (q > p), если и только если q ≤ p + 2 + 2 2 p . Следовательно, если оно выполняется, тогда количест1 2
во шагов может быть < 2. С другой стороны, число шагов > ( p + q ) − pq (так как pq не является точным квадратом), а условием этого будет ≥ 1 (так что число шагов будет > 1), что указывает на то, что предыдущая оценка q была точной: если q ≥ p + 2 + 2 2 p , то, по крайней мере, необходимы ещё два шага. (Конечно, мы не имеем здесь равенство для р > 2). Например, при р = 11 069 это даёт q ≤ 11 368, и наибольшее простое число, для которого ≤ 11 368 будет 11 353. Действительно, следующее простое число – это 11369, что подтверждает, что этот метод требует двух шагов. Испытаем некоторые другие простые числа р и докажем, что оценка даёт наибольшее простое число, для которого метод Ферма завершается после одного шага. Заметим, что если р и q являются нечётными, но не являются оба простыми числами, тогда метод Ферма может закончиться более быстро, чем согласно выдвинутым аргументам. Для этого случая можно обнаружить, что множитель располагается между pq и q. В качестве примера выберем p = 3, q = 15; метод обнаруживает множитель 9 сначала (после первого шага), несмотря на то, что для простого числа q вышеназванный аргумент доказывает необходимость двух шагов (для q ≥ 11). Сможете ли Вы определить наибольшее q, для которого достаточны два шага, согласно изложенному методу, принимая, что p и q являются простыми числами? 3. Зная n и φ(n) (и то, что n = pq для разных простых чисел р и q), несложно найти р и q. Так как φ(n) = (p – 1)(q – 1), то получим p + q = n + 1 – – φ(n). Отсюда р и q являются корнями квадратного уравнения х2 – (n + 1 – – φ(n))x + n = 0. Напишите программу определения р и q, исходя из n и φ(n). Проверьте на малых числах, а потом с числом n ≈ 1016. Найденные простые числа р и q перемножьте между собой, используя соответствующую программу. 4. Существует возможность того, что число Р из открытого текста может не быть взаимно простым с произведением pq = n (вероятность этого (n – φ(n))/n, т. е., 1/p + 1/q – 1/pq, а это очень мало, когда р и q достаточно велики). Покажите, что даже если de ≡ 1 (mod φ(n)), то и тогда Рde ≡ P (mod φ(n)). Конечно, если (P, n) > 1, тогда НОД Р и n должен быть р или q, так как выбирается P < n. Таким образом, послание открытым текстом, которое не взаимно простое с n, является губительным для сохранения множителей p и q в секрете! 5. Предположим, что nG < nR . Покажите, что R может послать свою подпись G обращением порядка вышеупомянутых операций EG и DR. Объ80
ясните, как это можно дешифровать, и почему это является гарантированной подписью. 21.2. Проект. Напишите программу, которая моделировала бы отправление посланий между двумя людьми. Все необходимые составляющие представлены в программе, реализующей метод RSA. Добавьте возможность отправки подписи. 21.3. Упражнения 1. Пусть число р будет вида 4k +3 и пусть a и b удовлетворяют сравнению a ≡ b2 (mod p), где p не делит a (эквивалентно p не делит b). Теорема Ферма показывает, что b4k+2 ≡ 1 (mod p). Используйте это, чтобы показать, что (ak+1)2 ≡ a (mod p), т. е., что x = ak+1 является решением x2 ≡ a (mod p). (Здесь роль b сводится к тому, что а сравнимо с квадратом по модулю р. Заметим, что x2 ≡ a (mod p) ⇔ x2 ≡ b2 (mod p) ⇔ x ≡ ±b (mod p), так как р является простым числом, отсюда b = ±ak+1, и существуют два решения: x = ±ak+1 и сравнение x2 ≡ a (mod p). 2. Пусть n=pq, где р и q – разные простые числа, оба сравнимые с 3 (mod 4), и пусть а ≡ b2 (mod n), как ранее. Используя тот факт, что x2 ≡ a (mod n) ⇔ x2 ≡ a (mod p) ⇔ x2 ≡ a (mod q), докажите, что существует точно четыре решения x2 ≡ a (mod n). Чтобы найти их точно, выберем r и s такими, что rp + sq = 1 (напомним, что р и q – разные простые числа, так что (p, q) = 1), и пусть x1 ≡ a (mod p), x2 ≡ a (mod q). (Метод вышеприведённого пункта (1) может быть использован для нахождения х1 и х2). Покажите, что х = x1 sq + x2 rp удовлетворяет x2 ≡ a (mod p и mod q) и, отсюда (mod n). Используя два выбора для х1 и два выбора для х2, получим четыре решения ( почему они обязательно различны по (mod n)?). 3. Теперь мы подошли к «орлянке» по телефону. У нас снова два действующих лица – R и G. а) R выбирает два больших простых числа р и q, оба совпадающих с 3 по mod 4, а затем посылает G произведение n = pq. б) G выбирает случайно число b, для которого 1 ≤ b ≤ n – 1, и вычисляет а ≡ b2 (mod n). (Заметим, что а ≡ 0 (mod n); почему это?) G отправляет а абоненту R. в) R определяет четыре решения x2 ≡ a (mod n), используя вышеприведённые методы пунктов (1) и (2). Искомыми решениями будут ± b (где b то же, что в (б)) и два других, скажем, ± с. г) Теперь подходит розыгрыш. R отсылает назад G одно из четырёх решений, которое он нашёл. Существенная разница будет между ± b или ± с. Аргументом является то, что если R отсылает назад ± b G, тогда R «выиграл»; если R отсылает назад ± с G, тогда R «проигрывает». Итак, R «уга81
дывает», с какого решения G начал, и если он правильно угадает, тогда он выигрывает. Так как не существует пути, по которому сообщается, с какого решения G начал, справедливо предсказание. д) Теперь приступим в проверке победы или неудачи. Предположим, что G получает решение ± с от R, такое, что R проиграл. G доказывает это следующим образом. Добавляя два решения, чтобы получить b + с, G представляет НОД (b + c, n). Покажите, что может быть р или q (используя тот факт, что b и с различаются только в знаке х1 или х2 в формуле для х вышеприведённого пункта (2)). Отсюда G выбирает множитель n ! Не существует разумного пути, но он может пойти на компромисс, обеспечивая р и q достаточно большими при отсутствии информации о полученных двух решениях. ( Теперь только остаётся возражать, если G заранее не может поверить R, что он выиграл!). 21.4. Проект. Напишите программу, реализующую этот метод игры в «орлянку» по телефону. 22. Применение уравнения Пелля 22.1. Упражнения 1. Докажите, что для любого иррационального α и любого действительного β найдется бесконечно много натуральных чисел х таких, что αx − β < 3 / x . 2. Докажите, что в неравенстве (1) можно заменить 3 на 2, если допустить, что х принимает любые целые значения. 3. Докажите, что в неравенстве (2) константу 3 можно заменить на ½. [Примените метод Морделла]. 4. Докажите, что если p / q − α < 1/ q 2 , то p rpn +1 + pn = , 0 ≤ r ≤ α n + 2 , n = −1,0,1,2,..., p −1 = 1 , q −1 = 0 . q rqn +1 + qn Для иррационального числа α обозначим через μ + (α ) такое число, что при любом v < μ + (α ) имеется лишь конечное число дробей p / q ,
удовлетворяющих
неравенству
0 < p / q − α < v / q2 ,
а
при
любом
2 v > μ + (α ) неравенство 0 < p / q − α < v / q имеет бесконечное число решений. Если же при любом числе v > 0 неравенство 0 < p / q − α < v / q 2 имеет бесконечное число решений, то положим по определению μ + (α ) = 0 .
Аналогично определим μ − (α ) , только вместо неравенства 0 < p / q − α используем неравенство 0 < α − p / q . 5. Докажите, что μ + (α ) = lim inf q 2 n +1 q 2 n +1α , 82
μ − (α ) = lim inf q2 n q 2 nα , где lim inf an – наибольшее такое a , что неравенство a n < a выполняется лишь конечное число раз, а qn – знаменатель подходящих дробей для α . 6. Докажите, что для любого натурального n ⎛ n 2 + 4n − n ⎞ ⎛ μ+ ⎜ ⎟ = μ − ⎜⎜ ⎜ ⎟ 2 ⎝ ⎝ ⎠ ⎛ n 2 + 4n − n ⎞ ⎛ μ− ⎜ ⎟ = μ + ⎜⎜ ⎜ ⎟ 2 ⎝ ⎝ ⎠
1 1 1⎞ + − ⎟= 4 n 2 ⎟⎠
1 n + 4n 2
1 1 n⎞ + − ⎟= 4 n 2 ⎟⎠
1 n 2 + 4n
, .
7. Докажите, что для любого натурального числа n минимальное натуральное число, представимое в виде nx 2 − ( n + 2 ) y 2 , где x, y – натуральные числа, равно n. 8. Пусть минимальное натуральное число, представимое в виде 2 Nx − y 2 , где x, y – натуральные числа, равно k. Докажите, что N − p / q > 0 , то μ − ( N ) = k /( 2 N ) , а для любой дроби p / q , если N − p / q > k / (2 N ). 9. Докажите, что в условиях задания (8) для любых целого Р и натурального Q Q ⎛ P−Q ⎞ ⎛ P −Q ⎞ , μ− ⎜ ⎟≤ ⎟≤ ⎝ N ⎠ 2 N ⎝ N ⎠ Q ⎛ P+Q⎞ ⎛ P+Q ⎞ , μ− ⎜ μ+ ⎜ ⎟≤ ⎟≤ ⎝ N ⎠ 2 N ⎝ N ⎠
μ+ ⎜
kQ , 2 N kQ . 2 N
10. Решите уравнение Пелля x 2 − ((nm) 2 − 2m) y 2 = 1 . 11. Покажите, что решения уравнения Пелля (10) являются наименьшими возможными. 12. Докажите, что простое число вида 4k + 1 представимо в виде суммы двух квадратов натуральных чисел, причем единственным образом. [Используйте результаты решения задания (10)]. 23. Примитивные корни 23.1. Теорема. Предположим, что g является примитивным корнем по модулю n. Тогда: а) для некоторых целых чисел r и s, g r ≡ g s (mod n) ⇔ r ≡ s (mod φ(n)), б) φ(n), числа 1, g, g2, . . . , g φ(n)–1 – все являются различными по mod n. Они, следовательно, являются числами, взаимно простыми с n. 23.2. Примеры 1. Ранее было найдено несколько решений конгруэнции а р – 1 ≡ ≡ 1 (mod p2), где а было задано, а р представляло собой простое число. Если задано р и мы можем найти примитивный корень g mod p2 (как мы увидим 83
ниже, частично это всегда выполняется), тогда относительно просто найти все значения, которые удовлетворяют конгруэнции. Так как (а, р2) должно быть 1 для конгруэнции, имеющей некоторые решения, мы уверены, что а ≡ ≡ gx (mod p2) для некоторых значений х, исходя из теоремы 22.1 (б). Действительно ар – 1 ≡ g (p – 1)x (mod p2), которое будет ≡ 1 (mod p2), если и только если (р – 1)х ≡ 0 (mod φ(p2) = p(p – 1)). Это выполняется, если и только если х ≡ 0 (mod p), так что решениями будут а ≡ g x (mod p2), где х = 0, р, 2р, . . . , (р – 2)р. Например, для р = 7 просто проверить, что 3 является примитивным корнем (по mod 49, а также, фактически, по mod 7), и эти решения дают а = 1, 18, 19, 30, 31, 48 (mod 49). Конечно, для чётного р – 1, если а является решением, тогда им будет (–а). Заметим, что всегда имеется точно (р – 1) различных решений по (mod p2). Действительно справедливо, что а р-1 ≡ 1 (mod pk) имеет точно р – – 1 различных решений по (mod pk) для k ≥ 1. Это может быть сравнимо по сложности с нахождением р для сравнения а р-1 ≡ 1 (mod p2) при заданном а. 2. Решите уравнения 12х ≡ 17 (mod 25) и у9 ≡ 17 (mod 25). Действительно, 2 является примитивным корнем по mod 25, как видно из следующей таблицы, показывающей степени 2 по mod 25. Вспомните, что φ(25) = 20.
k
6
4
2
0
1
2
3
4
3
1
7
4
5
6
7
8
9
8
1
2
9
3
Представленные результаты не только показывают, что 2 является примитивным корнем, так как 2k не сравнимо с 1 (mod 25) для 0 < k < 20, но они представляют решение сравнения 2k ≡ b для каждого b, взаимно простого с 25. (В такой ситуации иногда говорят, что b имеет индекс k по модулю 25). Индексы имеют тесную связь логарифмами, так как для перемножаемых чисел складываются их индексы. Возвратимся к сравнению 12х ≡ 17 (mod 25). Так как по mod 25, 12 ≡ ≡ 29 и 17 ≡ 213, как видно из таблицы, мы можем переписать это, как 29х ≡ ≡ 213 (mod 25), и, как следует из п. 22.1 (а), это эквивалентно 9х ≡ ≡ 13 (mod 20). Решая это обычным способом (т. е., 9 × 9 ≡ 1 (mod 20)), получим х ≡ 17 (mod 20). Так как у9 ≡ 17 (mod 25), мы заметим, что это означает (у, 25) = 1, так что можно написать у ≡ 2х (mod 25), и уравнение читается как 29х ≡ 213(mod 25), которое, как ранее, даёт х ≡ 17 (mod 20). Таким образом, используя таблицу, получим у ≡ 22(mod 25).
84
23.3. Упражнения 1. Убедитесь, что 2 является примитивным корнем по mod 112 и по mod 132. (Возможно, ценно использовать короткие программы для вычисления порядка, просто умножая 2 на себя и сокращая по mod p2 каждый раз, пока не достигнут результат). Как и в вышеприведённом п. 22.2 (а), убедитесь, что решениями для а р-1 ≡ 1 (mod p2 ) будут р = 11, для а ≡ 1, 3, 9, 27, 40, 81, 94, 112, 118, 120 (mod 121). Используйте соответствующую программу, чтобы вычислить степени 2. Найдите решения для р = 13. 2. Убедитесь, что 7 является примитивным корнем по mod 22. Отсюда найдите все решения х для 19х ≡ 17 (mod 22). 3. Проверьте, что 3 является примитивным корнем по mod 17, отсюда, покажите, что 7х ≡ 6 (mod 17) ⇔ х ≡ 13 (mod 16). 4. Убедитесь, что 5 является примитивным корнем по mod 18, отсюда, покажите, что 13х ≡ 7 (mod 18) ⇔ х ≡ 2 (mod 3). 5. Предположим, что g является примитивным корнем по mod n, где n > 2. Покажите, что х2 ≡ 1 (mod n) имеет точно два решения (напишите х ≡ ≡ gk), и докажите, что х2 ≡ 1 (mod n) ⇔ х ≡ ± 1 (mod n). 23.4. Лемма. Единственно возможными числами n, которые могут обладать примитивнвными корнями, являются те, которые имеют вид: n = 2k или рт, или 2 рт, где k ≥ 0, m > 0 и р – нечётное простое число. 23.5. Теорема. Предположим, что а является примитивным корнем по mod 2k для некоторого k ≥ 3. Тогда а также и примитивный корень по mod 2k – 1. Отсюда, не существуют примитивные корни по mod 2k для k ≥ 3. 23.6. Теорема. Пусть р будет нечётным простым числом, и d | (p – 1). Пусть ψ(d) = #{x: 1 ≤ x ≤ p и ordp x = d}. Тогда ψ(d) = φ(d). В особенности, ψ(р – 1) = φ(р – 1): число примитивных корней по mod p точно равно φ(р – 1). (Заметим, что это справедливо и для р = 2). 23.7. Упражнения 1. Сколько примитивных корней существует по mod 11 ? Найдите все. Выполняется ли это для mod 13. Для р = 13 проверьте результат п. 22.3 для всех делителей d чисел р – 1. 2. Пусть р будет простым числом, сравнимым с 1 (mod 4). Используя п. 22.1, объясните, почему должен существовать элемент х порядка 4 (mod p)? Докажите, что х2 ≡ –1 (mod p). Почему такое не может существовать для х, когда р ≡ 3 (mod 4) ? 3. Пусть g будет примитивным корнем по mod p для простого числа р вида 8n + 1. Почему g2n ≡ 1 и g4n ≡ –1 (mod p) ? Пусть х = gn ± g7n. Покажите, что х2 ≡ ±2 (mod p), где знаки + и – являются аналогичными. 85
4. Пусть n = 4 h, где h > 1. Покажите, что а = 2 h + 1 приводит к а ≡ 1 (mod 4h). Покажите также, что а не сравнимо с 1 (mod 4h), и докажите, что не существуют примитивные корни по mod n для вышеприведённого п. 22,3 (4). 5. Пусть g будет примитивным корнем по mod p для простого числа р, так что по (mod p) 1, g, g 2, . . . , g p–1 (1) являются числами 1, 2, . . . , р – 1 в некотором порядке. Покажите, что разностии g – 1, g 2 – g, . . . , g p–2 – gp–3, 1 – g p–2 являются по (mod p) циклическими перестановками (1). 6. Пусть р = 4n + 3 будет простым числом и примем, что а(р–1)/2 ≡ ≡ 1(mod р). Покажите, что х = ±a n+1 удовлетворяет х2 ≡ а (mod p). Так как это а конгруэнтно квадрату по (mod p), мы назовём а квадратичным вычетом по mod p. 7. Пусть p = 8n + 5 будет простым числом и примем а(р–1)/4 ≡ 1(mod р). Проверьте, что х = ±a n+1 удовлетворяет х2 ≡ а (mod p). Это а также является квадратичным вычетом по mod p. 8. Пусть р будет нечётным простым числом и предположим, что существует m, такое, что для всех а, для которых p не делит a, получим аm ≡ ≡ 1(mod р). Заметим, что выбор а = – 1 показывает, что m является чётным. Предположим, что для некоторого а с p | a у нас будет аm/2 ≡ 1(mod р). Выбирая g примитивным корнем по mod p, покажите, что gт/4 ≡ – 1(mod р), и что точно половина р – 1 чисел а = 1, 2, . . . , р – 1 удовлетворяет сравнению аm/2 ≡ 1(mod р), а другая половина удовлетворяет аm/2 ≡ –1(mod р). Два вышеприведённых упражнения (7) и (8) близко связаны со следующим результатом, который даёт широкие возможности для его использования в последующем. Пусть р будет нечётным простым числом и пусть g будет примитивным корнем по mod p. Пусть p не делит a, так что а ≡ gk(mod р) для некоторого k, который единственным образом определён по mod (p – 1). Так как р – 1 является чётным числом, то можно смело сказать, что k будет чётным или нечётным. Также ар–1 ≡ 1(mod р), исходя из теоремы Ферма, так что р, будучи простым (и нечётным!), удовлетворяет сравнению а(р–1)/2 ≡ ±1(mod р). Тогда мы получим следующее: 2
23.8. Теорема. Для принятой системы обозначений а) k является чётным ⇔ а(р–1)/2 ≡ 1(mod р) ⇔ а ≡ х2(mod р) для некоторого х; б) k является нечётным ⇔ а(р–1)/2 ≡ – 1(mod р) ⇔ а не сравнимо с х2(mod р) для всех х. Следовательно, мы имеем следующий результат, в котором не упоминается примитивный корень g: 86
в) критерий Эйлера для квадратичных вычетов: х2 ≡ а (mod р) имеет решение для х ⇔ а(р-1)/2 ≡ 1(mod р). 23.9. Теорема. Пусть р будет простым числом. Тогда а) если g является примитивным корнем по mod p, то либо g, либо g + p является примитивным корнем по mod p2 ; б) если g является примитивным корнем по mod p2, то g будет примитивным корнем по mod pk для k ≥ 1; в) если g является нечётным (соответственно, чётным) примитивным корнем по mod pk , то g (соответственно, g + pk) будет примитивным корнем по mod 2pk. 23.10. Теорема. Число n обладает примитивным корнем, если и только если n = 1, 2, 4, pk или 2pk для нечётного простого числа р и k ≥ 1. 23.11. Компьютерное упражнение. Найдите наименьшее число g, для которого g является примитивным корнем по mod 29, но не по mod 292. Покажите, что наименьшее простое число р, для которого 10 является примитивным корнем по mod p2, есть р = 487. 23.12. Упражнения 1. Покажите с помощью простой индукции по k, что для а нечётного и k ≥ 3, a↑2k–2 ≡ 1 (mod 2рk). (Напишите а↑2k–2 = 1 + r2k и квадрат). 2. Покажите с помощью индукции по k, что для k ≥ 3, 3↑2k–2 ≡ 1 (mod 2k). (Действительно, это справедливо также для k = 2, но Ваш первый шаг, вероятно, будет 3↑2k–2 ≡ 1 (mod 2k), исходя из пункта (1), а это требует k ≥ 3). 3. Покажите с помощью индукции по k , что для k ≥ 3 порядок 3 mod 2k равняется 2k–2. 23.13. Проект. Напишите программу для определения наименьшего примитивного корня по mod p для любого p < 200. (Большинство таких наименьших примитивных корней являются совсем маленькими числами; единственное исключение р = 191, для которого Вы найдёте 19 – наименьший примитивный корень. Полезно рассмотреть один метод, помимо чисто силового, с помощью которого можно, в принципе, найти примитивный корень g для некоторого нечётного простого числа р. Идея заключается в том, чтобы начать с некоторого предполагаемого а, такого, как а = 2, и, если это не примитив, получить следующие числа с последовательно увеличивающимся порядком по mod p. В конце концов (а обычно, достаточно быстро) получим примитивный корень, хотя, не обязательно, наименьший.
87
Таким образом, начиная, скажем, с а = 2, вычислим а, а 2, а 3, . . . , по (mod p), пока первое число, конгруэнтное 1 будет аr, так что r = ordpa. Если r = p – 1, то стоп! Другим способом принимают b первым числом, для которого 2 < b < p – 1, и b не конгруэнтно ни одной степени а. Пусть s будет порядком b(mod p). Если s = p – 1, тогда Вам необходимо взглянуть дальше! В одном случае выполняется, что s | r. [Доказательство: если s | r, тогда br ≡ 1 (mod p). Но 1, а, . . . , аr–1 являются спаренными конгруэнтными решениями сравнения (x r) ≡ 1(mod p), а эта конгруэнция имеет точно r решений, так что b должно иметь степенью а]. Таким образом, НОК(r, s) > r. Тогда получим r = ux, s = vy при (u, v) = 1 и uv = НОК(r, s), и рассмотрим c ≡ ax by (mod p). Это с должно иметь порядок uv = НОК (r, s) > r. Если uv = p – 1, тогда процедура заканчивается, а с является примитивным корнем, в противоположном случае начинаем, но с числа с, вместо а. 23.14. Проект: конструкция примитивного корня по mod p. Напишите программу, иллюстрирующую вышеприведённый метод. Для следующих простых чисел Вы должны получить представленные примитивные корни: р 7 41 73 191 311 479
корень
3
7
5
189
309
477
Обратите внимание, что в последних трёх случаях – 2 является примитивным корнем. Заметьте, что вышеизложенный метод непрактичен для больших простых чисел только из-за проблемы хранения; программа должна записывать степени а до того, как вычет 1 будет достигнут, а для этого необходимы, ни много, ни мало, р – 1 из них. Когда у n есть примитивный корень, скажем, g, тогда порядок g будет φ(n), и, используя теорему Эйлера для некоторого а, для которого (a, n) = 1, мы получим ordn a | φ(n). Естественно спросить, какой соответствующий результат будет, когда (если случайно произойдёт) n не имеет примитивного корня. Заменит ли минимальный универсальный показатель λ(n) функцию Эйлера φ(n) в этом случае? Таким образом, нам бы хотелось, чтобы ordn a | λ(n) для всех а, взаимно простых с n, и чтобы существовал некоторый а, для которого ordn a = λ(n). Рассмотрим, например, n = 800 = 2552, для которого φ(n) = 320. Используя ранее рассмотренный п. 22.12 (1), а8 ≡ 1 (mod 25) для некоторого нечётного а. Согласно теореме Эйлера, а20 ≡ 1 (mod 52) для некоторого а, удовлетворяющего условию 5 не делит a. Таким образом, для некоторого а, (а, n) = 1, мы получим а40 ≡ 1 (mod 2552), а 40 является НОК 8 и 20. Существует ли значительно меньшая степень а, которая тоже сравнима с 1 (mod n). 88
Существует ли элемент точно порядка 40? Используя п. 22.12 (3), мы получим, что ord32 3 = 8. Так как 25 имеет примитивный корень g (например, g = 2), то существует g, имеющее ord25 g = φ(25). Таким образом, мы ищем решение системы x ≡ 3 (mod 32), x ≡ g (mod 25) с помощью китайской теоремы об остатках. (Для g = 2 это даёт x = 227). Если xk ≡ 1(mod 32 и mod 25), так что, для вышеприведённых порядков, 8 | k и 20 | k; отсюда, 40 | k и, действительно, х имеет порядок точно 40. вернее, чем сомножитель 40. Для λ(800) = 40 мы получим аλ(800) ≡ 1 (mod 800) для всех а, для которых (а, 800) = 1, и существует элемент х порядка точно λ(800). Это λ и называется минимальным универсальным показателем для 800. Общий случай аналогичен. Таким образом, для каждого n ≥ 1 мы ищем число λ такое, что для всех а, удовлетворяющих (а, n) =1, будем иметь аλ(n) ≡ 1 (mod n), и, далее, λ(n) минимально в том смысле, что существует число, чей порядок по mod n является точно λ(n). Существование такого числа первоначально было доказано Кармайклом в 1909 г.; определение λ – функции введено Е. Лукасом. 23.15. Упражнение: минимальный универсальный показатель λ(n) 1. Используя результаты вышеприведённого п. 22.12, покажите, что k λ(2 ) = 2k–2 для k ≥ 3. Отдельно покажите, что λ(4) = 2 и λ(2) = 1. Конечно, λ(1) = 1 тоже. 2. Пусть n = 2n1 p2n2 . . . prnr представляет собой разложение на простые сомножители в степенях числа n, где n1 ≥ 0, а остальные ni > 0. Определим λ(n) являющимся наименьшим общим кратным r чисел λ(2n1) (как в (1)) и φ(pini) для i = 2, . . . , r. (Отметим, что если n > 2, тогда λ(n) будет чётным). Покажите, что для всех а, для которых (a, n) = 1, будем иметь место сравнение аλ(n) ≡ 1 (mod n). 3. Возьмём λ(n) такое, как в (2), и пусть gi будет примитивным корнем по mod pini для i = 2, . . . , r. Пусть х будет решением системы уравнений
x ≡ 3 (mod 2n1), x ≡ gi (mod pi ni) для i = 2, . . . , r. Покажите, что порядок x mod n точно равен λ(n). 23.16. Проект. Напишите программу для определения λ(n), исходя из n. Определите также элемент х, чей порядок по mod n равен λ(n). 23.17. Упражнение: снова о числах Кармайкла Пусть n > 2 и пусть х имеет порядок точно λ(n). Предположим, что n–1 х ≡ 1 (mod n). Докажите, что λ(n) | (n – 1). Покажите, что это означает, что n является нечётным (вспомните, что λ(n) чётное для n > 2). Предположим, для противопоставления, что р является простым числом (> 2) и что pk – наивысшая 89
степень р – делителя n, где k ≥ 2. Используйте φ(pk) | λ(n), чтобы показать, что p | (n – 1). Это противоречие показывает, что n является произведением различных нечётных простых чисел. Наконец, используйте φ(p) = (р – 1) | λ(n), чтобы показать, что для каждого простого числа p | n у нас будет (p – 1) | (n – 1). Это доказывает, что n является числом Кармайкла, если и только если n = q1 q2 . . . qk, k ≥ 2, где qi являются различными нечётными простыми числами и для каждого i (qi – 1) | (n – 1). 23.18. Упражнения 1. Найдите наименьший квадратичный невычет по mod p для простых чисел 17, 19, 997, 1 000 333, 10 000 993, используя написанную Вами программу расчета. Далее решите сравнения: х2 ≡ 15 (mod 17), х2 ≡ 11 (mod 19), х2 ≡ 589 (mod 997), х2 ≡ 3 (mod 1000333), х2 ≡ 2 (mod 10000993). 2. Испытайте правило Шэнкса относительно того, что в среднем в двух третях случаев не требуется совсем повторения: х0 является решением. 3. Почему максимум возможного числа шагов алгоритма Шэнкса равен s0? Здесь приведено несколько примеров, где (достаточно просто!) сравнение требует максимального числа итераций; конечно, Вы можете найти больше. В каждом случае найденный невычет равен 3, а сравнением будет х2 ≡ 9. по mod 17: s0 = 4; по mod 257: s0 = 8; по mod 65537: s0 = 16; по mod 167 772 161: s0 = 25.
4. Предположим, что р является нечётным простым числом, k ≥ 2, p не делит a и х1 является решением х2 ≡ а (mod pk), 0< х < pk. (1) 5. Покажите, что х1 может быть представлено единственным образом как х1 = х2 + spk–1, где 0 ≤ s < p, a x2 является решением сравнения
х2 ≡ а (mod pk–1 ),
0 < х < pk-1.
(2)
6. Предположим, что x2 удовлетворяет (2). Покажите, что х1 = х2 + spk–1 удовлетворяет (1), если и только если
⎛ x22 − a ⎞ 2 x2 s ≡ −⎜⎜ k −1 ⎟⎟(mod p ) . ⎝ p ⎠ Здесь правая часть (не является символом Якоби!) будет целым числом, так как х2 удовлетворяет (2). Докажите, что х1 единственным образом определяется х2. 90
7. Докажите, что сравнение (1) имеет то же число решений, что и ⎛a⎞
х2 ≡ а (mod p), а именно, два, если ⎜ ⎟ = 1, и не имеет решений ⎝ p⎠ в противоположном случае. 8. Что будет, если p | a? 9. Решите сравнения, где р замените на р2 в вышеприведённом п. 6 этого упражнения. Последнее из них,
х2 ≡ 2 (mod 10 000 9932 = 100 019 860 986 049) выполнимо, если воспользоваться расширенной точностью (extended), но Вам будет необходим алгоритм Хэда для проверки точности ответа! Ответом будет x = 33 406 487 105 406 (и s = 3 340 317). 10. Найти решение сравнения х2 ≡ а (mod 2k). Метод, данный в п. 7 не будет здесь работать, но некоторые изменения получаются за счёт хитрых приемов. Случаи k = 1 или 2, мы оставим решать Вам! Также необходимо рассмотреть случай, когда а – нечётное число (в противном случае k может быть сокращено), что означает, что все решения являются также нечётными. Отсюда и далее мы условимся, что а является нечётным, и k ≥ 3. 11. Предположим, что
х2 ≡ а (mod 2k).
(3)
Используя тот факт, что любой квадрат сравним с 1 (mod 8), покажите, что х2 ≡ 1 (mod 8). Отсюда и далее мы примем, что это выполняется. 12. Покажите, что если х и у оба являются решениями сравнения (3), тогда
x− y x+ y ⋅ ≡ 0 (mod 2k–2). Докажите, что 2k–2 является делителем одно2 2
го из сомножителей и, отсюда, что х ≡ ±у (mod 2k-1 ). Докажите, что если существует одно решение х уравнения (3), тогда существуют ровно четыре решения по (mod 2k), а именно, ± х и ±х + 2k–1. 13. Начав с решения х = 1 сравнения (3), когда k = 3 (вспомните, что а ≡ 1 (mod 8)), сконструируйте решение (3) для любого k. [Подсказка. Пусть х2 удовлетворяет х2 ≡ а (mod pk–1 ). Вместо написанного в п. 7 х1 = х2 + + s ⋅ 2k–1 запишите х1 = х2 + s ⋅ 2k–2 (почему это является улучшением?). Покажите, что для того, чтобы х1 удовлетворял уравнению (3), нам необходимо, чтобы s = ( х22 – a)/2k–1 (mod 2)]. Докажите, что уравнение (3) имеет точно четыре решения для любого k ≥3. 91
14. Напишите программу для определения всех решений уравнения (3) для любого а (сравнимого с 1 mod 8) и k (в пределах расширенной точности). Программа должна распечатать последовательные значения s, полученные при изменении от 3 до k. Когда а = 9, почему все значения s равны 1? [Намёк. 32 = 9]. Проверьте работу Вашей программы тестированием для малых значений а и k. Проверьте, что четырьмя решениями (mod 230) вида х2 ≡ 17 (mod 230) будут х = 204 265 751, 332 605 161, 741 136 663, 869 476 073. 15. а) предположим, что n ≥ 1 и Fn = 2
2n
+ 1 является простым чис-
лом. Покажите, что F ≡ 5 (mod 12), и докажите, что ⎛⎜ ⎞⎟ = −1. Это означает, ⎝F⎠ что k = 3 является всегда подходящим значением при использования теста Пепина для чисел Ферма. Покажите, что 5 также является подходящим значением, как и 10; б) используйте тест Пепина (и программу степенного алгоритма) или другой способ для проверки на простоту числа Ферма, пока точность ЭВМ Вам это позволит. 3
⎛5⎞
в) покажите, что ⎜ ⎟ = 1, p является нечётным простым числом, если и ⎝ p⎠ ⎛7⎞
только если р ≡ ±1 (mod 10), а ⎜ ⎟ = 1, если и только если р ≡ ±1 или ±3, или ⎝ p⎠ ±9 по (mod 28). (В последнем случае сначала убедимся, что квадратичные вычеты по mod 7 равны 1, 2 и 4). Если Вам хочется побольше практики, добавим ещё несколько результатов: ⎛ −3 ⎞ ⎜ ⎟ = 1, если и только если р ≡ 1 (mod 6), ⎝ p⎠ ⎛ −5 ⎞ ⎜ ⎟ = 1, если и только если р ≡ 1, 3, 7 или 9 (mod 20), ⎝ p⎠ ⎛ 11 ⎞ ⎜ ⎟ = 1, если и только если р ≡ ±1, ±5, ±7, ±9 или ±19 (mod 44). ⎝ p⎠
23.2. Проект. Напишите программу, которая моделировала бы отправление сообщений между двумя абонентами. Все необходимые составляющие представлены в программе, реализующей метод с использованием эллиптических кривых. Добавьте возможность отправки подписи. 23.3. Упражнения 1. Рассчитайте
следующие
выражения
вручную:
⎛ 1711 ⎞ ⎛ 1711 ⎞ ⎛ 1711 ⎞ ⎛ 1711 ⎞ ⎜ ⎟,⎜ ⎟,⎜ ⎟,⎜ ⎟ . Для каких знаменателей k Вы можете с уве⎝ 1999 ⎠ ⎝ 2007 ⎠ ⎝ 2021 ⎠ ⎝ 2027 ⎠
ренностью доказать, что 1711Rk ? 92
n 2. В ходе вычислений ⎛⎜ ⎞⎟ «числитель» уменьшается. Почему он в коk ⎝ ⎠
нечном итоге достигает 1 или степени 2? −1
3. Покажите, что (для k нечётного) ⎛⎜ ⎞⎟ = 1, если и только если k ≡ ⎝ k ⎠ ≡ 1 (mod 4). 4. Предположим, что j и k являются нечётными числами и > 0, а так⎛n⎞
же, что j ≡ k (mod n), (j, n) = 1 и n ≡ 0 или 1 (mod 4). Покажите, что ⎜ ⎟ = ⎝ j⎠ n = ⎛⎜ ⎞⎟ . (Примените сначала теорему о взаимности к каждой части этого ⎝k⎠
уравнения. Для n ≡ 0 (mod 4), Вы найдёте её полезной, чтобы применить к 2 формуле ⎛⎜ ⎞⎟ . k ⎝ ⎠
5. Предположим, что j и k являются нечётными числами и > 0, а также, что j ≡ k (mod 4n), (j, n) = 1. Докажите с помощью вышеприведённого ⎛n⎞
⎛n⎞ ⎜ ⎟ . (Замените n на 4n в пункте (5)). Этот полезный ⎝k⎠ ⎛n⎞ результат показывает, почему значение ⎜ ⎟ для нечётного простого числа р ⎝ p⎠
пункта (4), что ⎜ ⎟ = ⎝ j⎠
зависит только от вычета р по модулю 4n. Для n = 7, –5 и 11 модуль 4n не может быть сокращён, несмотря на то, что для n = 5 и –3 он может быть сокращён до 2n. 6. Относительно просто написать программу для реализации метода n оценки ⎛⎜ ⎞⎟ , использованного в предыдущем примере. Мы постоянно соk ⎝ ⎠
кращаем n mod k, выбирая степени 2 из n, обращая n и k и повторяя процесс. Если Вам нравится писать собственные программы, то мы предоставим еще одну возможность. Она не включает какой-нибудь защиты от того, чтобы у n и k оказалось бы общее кратное (что может случиться тогда с Вашим алгоритмом?), или, что k – чётное число. Мы также предполагаем, что n > 0. Программа распечатывает последовательность символов Якоби, получающуюся в результате вычислений со знаками + или – перед числами. n Каждая строка, написанная в программе, равняется первоначальному ⎛⎜ ⎞⎟ . k ⎝ ⎠
7. Пусть число р будет вида 4k +3 и пусть a и b удовлетворяют сравнению a ≡ b2 (mod p), где p не делит a (эквивалентно p не делит b). Теорема Ферма показывает, что b4k+2 ≡ 1 (mod p). Используйте это, чтобы показать, что (ak+1)2 ≡ a (mod p), т. е., что x = ak+1 является решением x2 ≡ a (mod p). (Здесь роль b сводится к тому, что а сравнимо с квадратом по модулю р. Заметим, что x2 ≡ a (mod p) ⇔ x2 ≡ b2 (mod p) ⇔ x ≡ ±b (mod p), так как р яв93
ляется простым числом, отсюда b = ±ak+1, и существуют два решения: x = ±ak+1 и сравнение x2 ≡ a (mod p). 8. Пусть n=pq, где р и q – разные простые числа, оба сравнимые с 3 (mod 4), и пусть а ≡ b2 (mod n), как ранее. Используя тот факт, что x2 ≡ a (mod n) ⇔ x2 ≡ a (mod p) ⇔ x2 ≡ a (mod q), докажите, что существует точно четыре решения x2 ≡ a (mod n). Чтобы найти их точно, выберем r и s такими, что rp + sq = 1 (напомним, что р и q – разные простые числа, так что (p, q) = 1), и пусть x1 ≡ a (mod p), x2 ≡ a (mod q). (Метод вышеприведённого пункта (1) может быть использован для нахождения х1 и х2). Покажите, что х = x1 sq + x2 rp удовлетворяет x2 ≡ a (mod p и mod q) и, отсюда (mod n). Используя два выбора для х1 и два выбора для х2, получим четыре решения (почему они обязательно различны по модулю n?).
94
Библиография
1. Айерлэнд К. Классическое введение в современную теорию чисел / К. Айерлэнд, М. Роузен. – М. : Мир, 1987. – 416 с. 2. Акритас А. Г. Основы компьютерной алгебры с приложениями / А. Г. Акритас. – М. : Мир, 1994. – 544 с. 3. Березин И.С. Методы вычислений / И. С. Березин, Н. П. Жидков – М. : Наука, 1966. – Т. 1. – 632 с. 4. Виноградов И. М. Основы теории чисел / И. М. Виноградов. – М. : Главная редакция физико-математической литературы издательства «Наука», 1972. – 168 с. 5. Воробьев Н.Н. Числа Фибоначчи / Н.Н. Воробьев. – М.: Наука, 1978. – 144 с. 6. Воронков Б. Н. Методическое пособие по разработке средств защиты информации в вычислительных сетях / Б. Н. Воронков, В. И. Тупота. – Воронеж : ЛОП ВГУ, 2000. – 112 с. 7. Giblin P. J. Primes and Programming: An Introduction to Number Theory with Computing / P. J. Giblin. – Cambridge : Cambridge University Press, 1993. – 237 c. 8. Заездный А. М. Основы расчетов по статистической радиотехнике / А. М. Заездный. – М. : Связь, 1969. – 448 с. 9. Коутинхо С. Введение в теорию чисел. Алгоритм RSA / С. Коутинхо. – М. : Постмаркет, 2001. – 328 с. 10. Математические и компьютерные основы криптологии : учеб. пособие / Ю. С. Харин [и др.]. – Минск : Новое знание, 2003. – 382 с. 11. Молдовян Н. А. Криптография: от примитивов к синтезу алгоритмов / Н. А. Молдовян, А. А. Молдовян, М. А. Еремеев. – СПб. : БХВПетербург, 2004. – 448 с. 12. Ноден П. Алгебраическая алгоритмика (с упражнениями и решениями) / П. Ноден, К. Китте. – М. : Мир, 1999. – 720 с. 13. Осипян В. О. Криптография в задачах и упражнениях / В. О. Осипян, К. В. Осипян. – М. : Гелиос АРВ, 2004. – 143 с. 14. Чандрасекхаран К. Введение в аналитическую теорию чисел / К. Чандрасекхаран; пер. с англ. С. А. Степанова ; под ред. А. И. Виноградова. – М. : Мир, 1974. – 188 с. 15. Янке Е. Специальные функции / Е. Янке, Ф. Эмде, Ф. Леш. – М. : Наука, 1977. – 344 с.
95
Учебное издание
ЭЛЕМЕНТЫ ТЕОРИИ ЧИСЕЛ И КРИПТОЗАЩИТА Учебное пособие для вузов Часть 2 Составители Воронков Борис Николаевич, Щеголеватых Александр Сергеевич Редактор И.Г. Валынкина
Подписано в печать 24.02.09. Формат 60×84/16. Усл. печ. л. 5,58. Тираж 50 экз. Заказ 2. Издательско-полиграфический центр Воронежского государственного университета. 394000, г. Воронеж, пл. им. Ленина, 10. Тел. 208-298, 598-026 (факс) http://www.ppc.vsu.ru; e-mail:
[email protected] Отпечатано в типографии Издательско-полиграфического центра Воронежского государственного университета. 394000, г. Воронеж, ул. Пушкинская, 3. Тел. 204-133
96