
Литература / Дискретная математика (пособие ЛЭТИ) / Дискретная математика (пособие ЛЭТИ)
.pdf
Министерство образования РФ
Санкт-Петербургский государственный электротехнический университет ½ЛЭТИ“
С.В.МАЛОВ С.Н.ПОЗДНЯКОВ С.В.РЫБИН
ОСНОВЫ ДИСКРЕТНОЙ МАТЕМАТИКИ
Учебное пособие
Санкт-Петербург
Издательство СПбГЭТУ ½ЛЭТИ“ 2002

Министерство образования РФ
Санкт-Петербургский государственный электротехнический университет ½ЛЭТИ“
С.В.МАЛОВ С.Н.ПОЗДНЯКОВ С.В.РЫБИН
ОСНОВЫ ДИСКРЕТНОЙ МАТЕМАТИКИ
Санкт-Петербург
Издательство СПбГЭТУ ½ЛЭТИ“ 2002
ÓÄÊ 512 ÁÁÊ Â174 ÿ7 Ì19
Малов С. В., Поздняков С. Н., Рыбин С. В. Основы дискретной матема тики: Учеб. пособие. СПб.: Изд-во СПбГЭТУ ½ЛЭТИ“, 2002. 72 ñ.
Охватывает как традиционные разделы дискретной математики, так и ряд тем, интерес к которым вырос благодаря новым приложениям, по явившимся за последнее десятилетие в связи с развитием информационных технологий.
Может использоваться как для студентов дневной формы обучения, так и для вечерних и заочных факультетов технических вузов.
Рецензенты: кафедра математического анализа СПбГУ; доц. М.В.Дмитриева (кафедра информатики СПбГУ).
Утверждено редакционно-издательским советом университета
в качестве учебного пособия
ISBN 5-7629-0456-3 |
c СПбГЭТУ ½ЛЭТИ“, 2002 |

В учебном пособии рассмотрено несколько классических тем курса математики. Часть этих тем, таких, как теория графов, традиционно от носится к курсу дискретной математики, интерес к другим определяется бурным развитием информационных технологий. Это избранные вопросы теории чисел (в том числе сравнения, функция Эйлера, цепные дроби, иг рающие большую роль в современной криптографии) и высшей алгебры (в том числе алгоритмы над целыми числами и многочленами, лежащие в основе инструментальных средств компьютерной алгебры, и элементы теории кодирования, необходимые для понимания процессов обработки ин формации).
Основные рассуждения, содержащие главные идеи излагаемого мате риала, приводятся полностью, в то же время утверждения, являющиеся либо слишком трудоемкими для доказательства (и не несущие принципи ально новых идей), либо дублирующие уже приведенные рассуждения, да
ны без доказательств (они отмечены знаком ) или в форме упражнений.
1.Арифметика целых чисел
1.1.Деление с остатком
Теорема 1.1 (о делимости с остатком). Для любых a, b Z,
b 6= 0 существуют, и притом единственные q, r Z, такие, что имеет место представление
a = bq + r, |
0 6 r < |b|. |
(1.1) |
Доказательство. Установим единственность представления (1.1). |
||
Пусть |
0 6 r < |b|, |
0 6 r1 < |b|. |
a = bq + r = bq1 + r1, |
Тогда b(q − q1) = r1 − r. Íî |r1 − r| < |b|, à |b(q − q1)| > |b|. Противоречие,
таким образом, q = q1, r = r1. |
, b |
|
|||
Число q в (1.1) называется целой частью дроби b |
= 1q. |
||||
|
|
a |
|
a |
def |
|
Определение 1.1. Будем говорить, что a делится на b (и обозна |
||||
чать как a k b), если в представлении (1.1) для |
a, b остаток r равен |
||||
íóëþ. |
|
|
|
||
|
|
|
|
|
|
1 |
def |
|
|
|
|
|
Знаком = будут начинаться обозначения |
|
|
|
3
Сформулируем простейшие свойства делимости, вытекающие непосредственно из определения.
Теорема 1.2. Справедливы следующие утверждения:
1) |
a k b, |
b k c, тогда a k c (транзитивность деления); |
k Z |
|
|||||||||
2) |
a1, a2 |
, |
. . . |
, a |
k |
c, тогда для любого набора λ |
, λ |
, . . . , λ |
ñïðà |
||||
3) |
|
kk |
|
b |
1 |
2 |
|
|
|||||
a b, |
P |
|
a |
|
|
|
|
|
|||||
|
ведливо |
i=1 ai |
λi k c; |
|
|
|
|
||||||
|
k |
|
тогда |
± |
|
k ± |
|
. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Замечание 1.1. Последнее свойство позволяет в вопросах делимо сти ограничиться рассмотрением только натуральных чисел.
1.2.Наибольший общий делитель, наименьшее общее кратное и их свойства
Определение 1.2. Пусть a1, . . . , ak, c Z. Åñëè c k a1, . . . , c k ak,
то говорят, что c есть общее кратное a1, a2, . . . , ak. Наименьшее среди всех кратных называется наименьшим общим кратным и обозначается
M(a1, a2, . . . , ak) èëè {a1, a2, . . . , ak}. Заметим, что
max{a1, a2, . . . , ak} 6 M(a1, a2, . . . , ak) 6 a1a2 · · · ak.
Очевидно, что любое кратное делится на наименьшее общее кратное.
Пусть a1, . . . , ak, d Z. Åñëè a1 k d, . . . , ak k d,
то говорят, что d есть общий делитель a1, a2, . . . , ak. Наибольший среди всех делителей называется наибольшим общим делителем и обозначается
D(a1, a2, . . . , ak) èëè (a1, a2, . . . , ak). Заметим, что
1 6 D(a1, a2, . . . , ak) 6 min{a1, a2, . . . , ak}.
Очевидно, что если d1, d2, . . . , dn общие делители a1, a2, . . . , ak, òî
D(a1, a2, . . . , ak) = M(d1, d2, . . . , dn). Последнее утверждение можно использовать в качестве другого определения наибольшего общего делителя.
Введем одно из важнейших понятий теории делимости.
Определение 1.4. Числа a1, a2, . . . , ak
ìè, åñëè D(a1, a2, . . . , ak) = 1.
Установим некоторые свойства наибольшего общего делителя и наи меньшего общего кратного.
4

Теорема 1.3. Справедливы следующие утверждения:
1)d = D(a1, a2, . . . , ak) D ad1 , ad2 , . . . , adk = 1;
2)d = D(a1, a2, . . . , ak), тогда D(a1b, a2b, . . . , akb) = db;
3)если c общий делитель a1, a2, . . . , ak, òî D ac1 , ac2 , . . . , ack = dc ;
4) ab = D(a, b)M(a, b). |
|
Вопрос о нахождении D(a, b) будет решен далее (см. 2.1). Предполо жим, что имеется эффективный алгоритм его вычисления. Поставим во
прос о вычислении D(a1, a2, . . . , ak). Ответ на этот вопрос дает следующая теорема.
Теорема 1.4.
D(a1, a2, a3) = D(D(a1, a2), a3)).
Доказательство. Введем обозначения: D(a1, a2) = e, D(e, a3) = d. То гда в силу транзитивности делимости (теорема 1.2) имеем a1, a2 k d, íî è a3 k d, следовательно, d общий делитель a1, a2, a3. Пусть d1 произ вольный общий делитель a1, a2, a3. Тогда e k d1, следовательно, d1 общий делитель e, a3. Тогда d k d1 и, следовательно, d = D(a1, a2, a3).
Упражнение 1.1.
1)ab k c и D(a, c) = 1, тогда b k c;
2)eñëè D(a, c) = 1, òî D(ab, c) = D(b, c).
1.3.Простые числа
Определение 1.5. Число a называется простым, если делится толь ко на |a| и на ±1.
Теорема 1.5. Пусть p простое число. Справедливы утверждения:
1)любое число a Z делится на p или на число, взаимно простое с p;
2)ab k p тогда и только тогда, когда a k p или b k p.
Доказательство теоремы провести самостоятельно в качестве упраж нения.
5

Лемма 1.1. Любое a Z, a 6= 1 имеет по крайней мере один простой делитель.
Доказательство. Пусть d1, d2, . . . , dn все делители числа a, кроме 1. Положим p = min{d1, d2, . . . , dn}. Åñëè áû p было составным, то его делитель (меньший, чем само p) был бы делителем a. Противоречие с опре
делением p. Лемма доказана.
Теорема 1.6 (oсновная теоремa теории делимости). Любое чис
ло a Z раскладывается и только одним способом на простые сомножи
тели. Соединив одинаковые множители в степени, получаем канониче ское разложение
a = pαqβrγ · · · , где p, q, r − простые числа, α, β, γ > 1. |
(1.2) |
Доказательство. По лемме 1.1 любое число a имеет простой делитель p. Представим его в виде pa1. Åñëè a1 составное, то воспользуемся лем мой 1.1 для a1. Заметим, что a1 < a, поэтому на некоторoм шаге получим ak простое. Таким образом, имеем представление
a = p1p2p3 · · · pk, ãäå p1, p2, p3 · · · pk простые.
Объединяя одинаковые множители в степени, приходим к (1.2). Докажем единственность представления (1.2). Пусть имеется два различных пред ставления
a = p1p2p3 · · · pk = q1q2q3 · · · qn. |
(1.3) |
Тогда p1p2p3 · · · pk k q1. По теореме 1.5 один из сомножителей слева делится на q1. Пусть, для определенности, p1 k q1. Íî p1 è q1
Поэтому p1 = q1. Тогда (1.3) можно переписать в виде
p2p3 · · · pk = q2q3 · · · qn.
Повторяя эту процедуру приходим к единственности представления (1.2).
1.4.Решето Эратосфена. Разложение числа на простые
Âсвязи с полученным представлением (1.2) возникает необходимость построить эффективные алгоритмы для решения следующих задач:
1.Найти все простые числа в данном интервале.
2.Для произвольного числа a Z получить его разложение в виде (1.2).
6

Для решения первой задачи рассмотрим алгоритм, носящий название Ре шето Эратосфена. Он позволяет найти все простые числа в интервале
[1, N].
Øàã 1. Вычеркиваем все числа, кратные 2 (каждое второе, кроме 2). По лагаем p1 = 2, k = 1.
Полагаем k = k + 1 è pk первое невычеркнутое число после pk−1. Вычеркиваем все числа, стоящие на местах, кратных pk, кроме него самого. Повторяем этот шаг, пока pk < N.
Замечание 1.2. Достаточно работать только с нечетными числа
ми, при этом p = 3. Алгоритм заканчивает работу, как только
√ 1 pk > N.
Пример 1.1 (на решето Эратосфена). Пусть N = 50. Тогда по
сле работы алгоритма получаем следующую картину (на месте вычерк нутых чисел стоит знак ):
2 3 5 7 9 11 13 17 19 23 29 31 37 41 43 47 49.
Возникает вопрос: сколько же простых чисел? Ответ был получен еще Ев клидом:
Теорема 1.7 (Евклид). Множество простых чисел бесконечно.
Доказательство. Допустим конечность множества простых чисел: {p1, p2, p3, . . . , pk}. Положим p = p1p2p3 · · · pk + 1. Очевидно, что таким
образом построенное число p не делится ни на одно из pi. Таким образом,
ëèáî p простое, либо имеет простой делитель, больший любого из pi. Полученное противоречие и доказывает теорему.
Перейдем к решению второй поставленной задачи: разложению числа
a на простые сомножители в виде (1.2). Начнем с простейшего алгоритма, носящего название метод пробных делителей. Используем последова
тельность простых чисел 2 = p0 < p1 < p2 < · · · <
√
< pk 6 a. Введем следующие обозначения:
k = 0, 1, 2, . . . номер текущего делителя pk тельности),
i = 0, 1, 2, . . . номера найденных делителей числа a (будем обозна di).
k = 0, i = 0.
(Проверка окончания) Если a = 1, то алгоритм заканчивает работу.
7

Øàã 3. a = pkq + r.
Øàã 4: Åñëè r 6= 0 (ò. å. a не делится на pk), то переходим на Øàã 6.
Øàã 5. (a делится на pk) Полагаем di = pk, i = i + 1, a =
íà Øàã 2.
Øàã 6. Åñëè q > pk, то полагаем k = k + 1
Øàã 7. a простое число. Полагаем di = a. Алгоритм заканчивает работу.
Пример 1.2 (на метод пробных делителей ). Положим a =
= 6930. Возьмем последовательность пробных делителей {2, 3, 5, 7, 11,
13, 17, 19, 23, 29, 31}:
1)a = 2 · 3465, d0 = 2, i = 1, a = 3465;
2)a = 2 · 1732 + 1, k = 1;
3)a = 3 · 1155, d1 = 3, i = 2, a = 1155;
4)a = 3 · 385, d2 = 3, i = 3, a = 385;
5)a = 3 · 128 + 1, k = 2;
6)a = 5 · 77, d3 = 5, i = 4, a = 77;
7)a = 5 · 15 + 2, k = 3;
8)a = 7 · 11, d4 = 7, i = 5, a = 11;
9)a = 7 · 1 + 4, d5 = 11.
Имеем: a = 6930 = 2 · 3 · 3 · 5 · 7 · 11 = 2 · 32 · 5 · 7 · 11.
Легко видеть, что описанный алгоритм эффективно работает на небольших числах. При их увеличении быстро растет число холостых делений. Рассмотрим алгоритм, который, используя только операции умноже ния и сложения (без делений), позволяет представить любое число в виде произведения двух (не обязательно простых) сомножителей.
Алгоритм Ферма
Не умаляя общности, можно считать, что исходное число a является нечетным 2. Выделить степени двойки достаточно легко (сдвигами вправо
двоичного представления числа). Будем искать представление a â âèäå
a = x2 − y2 = (x − y)(x + y).
2Метод не работает для четных чисел, содержащих в разложении 2 в первой степени. Например, 26 = 2 · 13 èëè 50 = 2 · 52.
8

Введем обoзначения: R(x, y) = x2 −y2 −a. Требуется, поочередно увеличи вая x è y íà 1, добиться равенства R(x, y) = 0. Заметим, что
R(x + 1, y) = (x − y + 1)(x + y + 1) = R(x, y) + 2x + 1,
R(x, y + 1) = (x − y − 1)(x + y + 1) = R(x, y) − (2y + 1).
Чтобы лишний раз не умножать на 2, введем обозначения: Rx = 2x + 1, Ry = 2y + 1. Заметим, что при увеличении x èëè y íà 1 Rx èëè Ry óâå
личиваются соответственно на 2. Для простоты изложения считаем, что известна приблизительная оценка целой части √
a обозначим ее через a¯.
Øàã 1. (Инициализация) Rx = 2¯a + 1, Ry = 1, R(x, y) = a¯2 − a.
Øàã 2. Åñëè R(x, y) 6 0, то перейти на Øàã 4.
Øàã 3. R(x, y) = R(x, y) − Ry, Ry = Ry + 2. Возвращаемся на Øàã 2.
Øàã 4. (Проверка окончания) Если R(x, y) = 0, то алгоритм заканчивает |
|||||
работу. При этом |
|
2 |
− |
|
|
2 |
|||||
a = |
Rx − Ry |
|
Rx + Ry |
|
1 . |
|
|
|
|
Øàã 5. R(x, y) = R(x, y) + Rx, Rx = Rx + 2. Возвращаемся на Øàã 2.
Пример 1.3 (на метод Ферма). Пусть a = 221, тогда a¯ = 14.
1) |
Rx = 29 |
Ry = 1 |
R(x, y) = −25. |
2) |
Rx = 31 |
Ry = 1 |
R(x, y) = 4. |
3) |
Rx = 31 |
Ry = 3 |
R(x, y) = 3. |
4) |
Rx = 31 |
Ry = 5 |
R(x, y) = 0. |
Имеем: a = 221 = 17 · 13.
Комбинируя методы Ферма и пробных делителей можно построить
достаточно эффективный алгоритм для разложения любого числа a на простые сомножители в виде (1.2).
1.5.Позиционная запись натуральных чисел
Упорядоченный набор (anan−1...a1a0)p называется p-ичной записью натурального числа s (представлением числа s в p-ичной
системе счисления или просто p-ичным числом), если
S = pnan + pn−1an−1 + · · · + pa1 + a0,
где p натуральное число, большее 1, 0 6 ak < p è an 6= 0.
9