Лекция по ДМ https://youtu.be/5rM4IMoCUp0 Напишите что-нибудь в чат, пожалуйста. http://students.iposov.spb.ru Дискретная математика = Теория чисел + Комбинаторика. =================================== Алгоритмы теории чисел 1. Деление с остатком Вспоминаем школу. 11 при делении на 3 дает остаток 2. Это означает, что если убрать 2 из 11, то результат поделится на 3. 11 - 2 делится на 3. Определение "деление с остатком" Даны два целых числа a и b. b > 0. Тогда выражение a = bq + r, где 0 <= r < b называется делением a с остатком на b. q - неполное частное r - остаток 17 делим на 3 17 = 3*5 + 2 5 - неполное частное (17/3 = 5.6666 округлить _вниз_, т.е. к -oo). 2 - остаток 17 = 3 * 4 + 5 Это не деление с остатком, потому что 5>=3. При делении на 3 остаток может быть только 0, 1, 2 Еще примеры 100 делим на 7. 100 = 7*14 + 2 = 98 +2 14 - неполное частное 2 - остаток. Замечание. Если a делится на b, то остаток 0: 10 = 2 * 5 + 0 Остаток при делении 10 на 2 равен 0 (неполное) частное = 5 Что если делим отрицательные числа -17 делим на 3 -17 = 3 * (-5) - 2 - НЕ деление с остатком -17 = 3 * (-6) + 1 - Да. Остаток 1: 0 <= 1 < 3 Нарисуем на оси числа и их остатки по модулю 4. x: -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 остаток от деления x на 4: 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 5 = 4*1 + 1 0 = 4*0 + 0 3 = 4*0 + 3 4 = 4*1 + 0 -4 = 4*(-1) + 0 -3 = 4*(-1) + 1 Вывод: на числовой оси остатки идут по циклу 0-1-2-3- Будьте внимательны в C/C++/Java и т.д. Там оператор % поиска остатка не так работает с отрицательными числами. Обозначение a mod b это остаток от деления a на b Примеры 11 mod 3 = 2 9 mod 4 = 1 -3 mod 4 = 1 Теорема: Деление с остатком определено однозначно. Т.е. если даны a, b - целые. b > 0 Тогда существует и единственны целые q и 0 <= r < b такие, что a = b*q + r Доказательство. Существование. Если a >= 0, то делаем следующее a1 = a - b Если a1 >= 0 a2 = a1 - b = a - 2b Если a2 >= 0 a3 = a2 - b = a - 3b Получаем последовательность a, a1, a2, a3 целые неотрицательные, и каждый следующий меньше предыдущего a_i < a_{i-1}. Такой ряд не может быть бесконечный. В какой-то момент a_k окажется меньше b. Это и будет остаток. a_k = a - k*b < b a = k*b + a_k это ровно то, что нужно. неполное частное q = k Аналогично разбирается ситуация с a <= 0, но надо добавлять b. Единственность. Пусть поделили двумя способами a = q1*b + r1 a = q2*b + r2 Проверим, что на самом деле это один и тот же способ вычтем равенства 0 = (q1-q2)*b + (r1 - r2) перепишем так: r1 - r2 = -(q1-q2)*b b|0 (это означет, что b делит 0 или 0 делится на b) (у нас более принято 0...b, три вертикальных точки) b | (q1-q2)*b т.к. здесь b множитель Следовательно, r1 - r2 делится на b но r1 >= 0, r2 < b, поэтому r1 - r2 > -b r1 < b, r2 >= 0, поэтому r1 - r2 < b Т.е. -b < r1 - r2 < b и b | r1 - r2 Но это может быть только 0. Поэтому r1 - r2 = 0 Поэтому r1 = r2 Поэтому q1*b + r1 = q2*b + r2 => q1*b = q2*b => q1 = q2. Доказали. Замечание. Понятие деления с остатком будет у нас и дальше. Мы будем делить многочлены с остатком. Многие утверждения, которые мы получим для чисел так же будут работать и для многочленов. ====== Наибольший общий делитель и наименьшее общее кратное. Определение. Пусть даны два числа a и b, целые не 0 Тогда 1. d - общий делитель a и b, если d | a, d | b 2. Наибольший общий делитель a и b - наибольший из их общих делителей. 3. m - общее кратное a и b, если a | m, b | m 4. Наименьшее общее кратное a и b - наименьшее из их положительных общих кратных. Примеры 6 и 14 Общие делители 6 и 14 это 1, **2**, -1, -2 НОД 6 и 14 = 2 Общие кратные 4 и 6 это 12. 4|12, 6|12. 24 36 и т.д. Их бесконечно много Наименьшее общее кратное это 12 Обозначения (a, b) = НОД a и b еще бывает НОД(a,b), gcd(a,b) [a, b] = НОК a и b НОК(a,b), lcm(a,b) Пример (4, 6) = 2 [4, 6] = 12 Замечание НОД всегда хотя бы 1 (a, b) >= 1 т.к. 1 - всегда общий делитель Утвержение. Пусть a, b целые не нули. d = (a, b) m = [a, b] пусть d' общий делитель (не обязательно наибольший) пусть m' общее кратное (не обязательно наименьшее) Тогда d' | d m | m' Пример. Общие делители 12 и 18: 1, 2, 3, 6 (12, 18) = 6 Все остальные делители делят 6: 1|6 2|6 3|6 6|6 [12, 18] = если подумать = ... 12=6*2 18=6*3 = 6*2*3 = 36. (точные способы см. дальше) Все остальные общие кратные делятся на 36. 72 и т.д. Доказательство утверждения. Доказательства очень похожи для НОК и НОД. m' делим с остатком на m. m' = q*m + r <=> r = m' - q*m a | m' a | m => a | r (справа число делится на a) аналогично, справа число делится на b. Получается, что r - общее кратное a и b. Но !!! r < m, которое наименьшее общее кратное. Это просто значит, что r = 0. Значит, остаток 0, значит m' делится на m