Опубликован: 02.03.2017 | Уровень: для всех | Доступ: свободно
Лекция 1:

Основы теории чисел

Лекция 1: 123456789 || Лекция 2 >

1.2 Теория сравнений и ее приложения

1.2.1 Сравнение по модулю

Определение 1.11 Числа, дающие при делении на m одинаковые остатки, называются сравнимыми по модулю m. Обозначение: a \equiv b ~(mod  \ m).

Теорема 1.14 (признак сравнимости по модулю) Два целых числа сравнимы по модулю m тогда и только тогда, когда их разность делится на m.

Итак, если два целых числа a и b сравнимы по модулю m, то этот факт можно записать разными способами: a  \equiv b (mod \ m) или a=b+mk, где k - целое число, или a-b=mk или (a-b)\, \vdots \,m.

Далее, если a=mq+r, то есть a при делении на m дает остаток r, то a-r=mq или a \equiv r (mod \ m). Таким образом, любое целое число a всегда сравнимо с остатком r, получающимся при делении его на m.

Свойства сравнений, не зависящие от модуля
  1. Отношение сравнимости удовлетворяет условиям:

    • рефлексивности: a \equiv a mod \ m,
    • симметричности: если a \equiv  mod \  m, то и b \equiv a \ mod \m,
    • транзитивности: если a \equiv b \ mod \ m, а b \equiv c \ mod \m, то a \equiv c \ mod \ m.

    Отношение, заданное на множестве и обладающее перечисленными свойствами, задает разбиение этого множества на непересекающиеся классы. Применительно к отношению сравнимости по модулю m это означает: все множество целых чисел разбивается на классы чисел, эти классы не пересекаются. Так, есть класс нуля: это все числа, сравнимые с нулем по модулю m,то есть делящиеся на m без остатка(включая и само число 0), класс единицы - все числа, дающие остаток 1 при делении на m, класс 2, ...,класс m-1. Например, пусть m=5. Получаем следующие классы:

    
       \begin{array}{lcl}
        \bar{0}&=&\{\dots,-10, -5, 0, 5, 10, 15, 20,\dots\} \\[1ex]
        \bar{1}&=&\{\dots,-9, -4, 1, 6, 11, 16, 21,{\dots}\} \\[1ex]
        \bar{2}&=&\{\dots,-8, -3, 2, 7, 12, 17, 22,{\dots}\} \\[1ex]
        \bar{3}&=&\{{\dots},-7, -2, 3, 8, 13, 18, 23,{\dots}\} \\[1ex]
        \bar{4}&=&\{{\dots},-6, -1, 4, 9, 14, 19, 24,{\dots}\}.
       \end{array}
       ( 1.2)

    Определение 1.12 Классы (1.2) называются классами вычетов.

  2. Сравнения по одному и тому же модулю можно почленно складывать.

  3. Два сравнения по одному и тому же модулю можно почленно вычитать одно из другого.

  4. К обеим частям сравнения можно прибавлять одно и то же целое число.

    Следствие 1.6 Члены сравнения можно переносить из одной части сравнения в другую с противоположным знаком.

  5. Сравнения по одному и тому же модулю можно почленно перемножать.

    Следствие 1.7 Обе части сравнения можно возводить в одну и ту же целую неотрицательную степень: если a \equiv b (mod \ m) и k - целое неотрицательное число, то a^k \equiv b^k (mod \ m).

  6. Обе части сравнения можно умножать на одно и то же целое число.
Свойства сравнений, зависящие от модуля
  1. Если a  \equiv b ~(mod \ m) и m \, \vdots \, n, то a  \equiv b ~(mod \ n).

  2. Обе части сравнения и модуль можно умножить на одно и то же целое положительное число.

  3. Если ak \equiv bk \ mod \ m и (k, m)=d, то a \equiv b \ mod \ {\frac{m}{d}}.

    Приведем следствия из свойства 9.

    Следствие 1.8 Если d=k, т. е. если m \, \vdots \, k, то из ak \equiv bk \ mod  \ m следует a \equiv b \ mod \frac{m}{k}, а это означает, что обе части сравнения и модуль можно разделить на любой их общий делитель.

    Большое значение имеет

    Следствие 1.9 Если d=1, т. е. если (k, m)=1, то из ak \equiv bk \ mod \ m следует a \equiv b \ mod \ m, а это означает, что обе части сравнения можно разделить на их общий делитель, если он взаимно прост с модулем.

    Пример 1.9 60 \equiv 9 (mod \ 17).

    После деления обеих частей сравнения на 3 получим 20 \equiv 3 ~(mod \ 17).

    Делить обе части сравнения на число, не взаимно простое с модулем, вообще говоря, нельзя, так как после деления могут получиться числа, несравнимые по данному модулю.

    Пример 1.10 8 \equiv 4~(mod \ 4), но 2 \not\equiv 1~(mod \ 4).

  4. Если сравнение a \equiv b имеет место по нескольким разным модулям, то оно имеет место и по модулю, равному наименьшему общему кратному этих модулей.

    Из рассмотренных свойств сравнений вытекает следующее общее свойство.

  5. Пусть P(x) - многочлен с целыми коэффициентами, a и b - переменные, принимающие целые значения. Тогда если a\equiv b ~(mod \ m), то P(a) \equiv P(b) ~(mod  \ m).

    Если a\equiv b~(mod \ m) и c_i\equiv d_i ~(mod \ m), то

    c_na^n+c_{n-1}a^{n-1}+\ldots+c_1a + c_0 = d_nb^n + d_{n-1}b^{n-1}+\ldots+d_1b + d_0  ~(mod  \ m).

    Таким образом, в сравнении по модулю m отдельные слагаемые и множители можно заменять числами, сравнимыми по тому же модулю m. В частности, все числа, кратные модулю, можно заменять нулями (так как если a \, \vdots \, m, то a \equiv 0~(mod \ m)).

    Вместе с тем следует обратить внимание на то, что встречающиеся в сравнениях показатели степеней заменять таким образом нельзя: из a^{n} \equiv c~(mod \ m) и n \equiv k~(mod \ m) не следует, что a^{k} \equiv c~(mod \ m).

    Свойство 11 имеет ряд важных применений. В частности, с его помощью можно дать теоретическое обоснование признаков делимости.

    Пример 1.11 Доказать, что при любом натуральном n число 37^{n+2} + 16^{n+1} +23^{n } делится на 7.

    Решение. Очевидно, что 37  \equiv  2~(mod \ 7), 16 \equiv  2~(mod \ 7), 23  \equiv  2~(mod \ 7).

    Возведем первое сравнение в степень n+2, второе - в степень n+1, третье - в степень n. Полученные сравнения: 37^{n+2} \equiv 2^{n+2}~(mod  \ 7), 16^{n+1} \equiv 2^{n+1}~(mod \ 7), 23^{n} \equiv 2^{n}~(mod \ 7), сложим:

    37^{n+2} +16^{n+1} +23^{n } \equiv 2^{n} \cdot (2^{2}+2^{1}+1) ~(mod \ 7)  \equiv   2^{n}\cdot 7~(mod \ 7), то есть 37^{n+2} +16^{n+1} +23^{n} делится на 7.

    Пример 1.12 Найти остаток от деления числа (9674^{6} +28)^{15} на 39.

    Решение. Так как 9674 \equiv 2~(mod \ 39), то 9674^{6} \equiv 2^{6}~(mod \ 39)=64 \equiv 25~(mod \ 39). Далее, 25+28=53 \equiv 14~(mod \ 39). Следовательно, (9674^{6} +28)^{15}\equiv 14^{15}. И задача теперь сведена к следующей: найти остаток от деления 14^{15} на 39. Воспользуемся сравнениями: 14\equiv -1~(mod \ 3) и 14\equiv 1 ~(mod \13). Из 14\equiv -1~(mod \ 3) следует: 14^{14}\equiv 1~(mod \ 3). А из сравнения 14\equiv 1 ~(mod  \13) следует: 14^{14}\equiv 1~(mod \ 13). И так как сравнение имеет место по модулям 3 и 13, то оно имеет место и по модулю 39, являющемуся НОК чисел 3 и 13. Итак, 14^{14}\equiv 1~(mod \ 39). Но в таком случае 14^{15}\equiv 14~(mod \ 39).

1.2.2 Возведение в степень по модулю

Пусть a,b,m\in \mathbb{N}, нам необходимо вычислить c = a^b ~(mod \ m). В дальнейшем перед нами часто будет стоять такая задача с очень большими числами a, b, m. Очевиднейший способ вычислить c - вычислить произведение \underbrace{a\cdot a\cdots a}_{n\ \text{раз}} и взять остаток от деления на m. Для этого потребуется b умножений и взятие остатка от деления огромного числа (не всегда даже его хранение в памяти может быть простым) по модулю m. Приведём оптимизации для этой задачи.

  1. Из свойства

    ((a\cdot b)~(mod \ m) \cdot c)~(mod \ m) = (a\cdot b \cdot c)~(mod \ m)

    следует, что промежуточные результаты вычислений можно перед хранением брать по модулю m.

  2. Сгруппируем сомножители в произведении особым образом. Пусть b=b_0 + 2b_1 + \ldots + 2^n b_n, b_i\in\{0,1\}. Имеем:

    a^b ~(mod \ m) = a^{b_0} \cdot (a^2)^{b_1} \cdot (a^4)^{b_2} \cdots \left(a^{(2^n)}\right)^{b_n} ~(mod \ m).

Используя пункт 1, будем все промежуточные результаты хранить по модулю m. Также для деления на 2 мы будем использовать операцию сдвига бит вправо:

2^n b_n  + 2^{n-1} b_{n-1}  + \ldots + 2 \cdot b_1 + b_0 ~~\rightarrow~~ 2^{n-1} b_{n}  + \ldots + 2 \cdot b_2 + b_1.

Микропроцессоры имеют специальные инструкции, а языки программирования - специальные операторы для оптимизированного выполнения битового сдвига, которые и следует использовать при реализации данного алгоритма.

Пункт 2 даёт следующий алгоритм возведения в степень по модулю.

Вход: a, b, m - целые неотрицательные числа.

1) Положить r=1, b'=b, x=a.
2) Повторять, пока b' > 0:
2.1) Если b' \equiv 1 ~(mod \ 2), положить r:=r\cdot x ~(mod \ m).
2.2) Положить x := x^2 ~(mod \ m).
2.3) Сдвинуть биты числа b' на один вправо (что эквивалентно вычислению b' = \lfloor b'/2 \rfloor ).

Выход: r - результат возведения a в степень b по модулю m.

Также отметим, что на шаге 1 копирование b'=b, x=a выполняются для того, чтобы не испортить значения a, b, которые могут передаваться в наш алгоритм по указателю или ссылке.

Лекция 1: 123456789 || Лекция 2 >
Евгений Шаров
Евгений Шаров

как начать заново проходить курс, если уже пройдено несколько лекций со сданными тестами?

Юлия Мышкина
Юлия Мышкина

Обучение с персональным тьютором осуществляется по Скайпу или посредством переписки?

Владислав Ветошкин
Владислав Ветошкин
Россия, Ижевск, Ижевский государственный технический университет имени А.Т. Калашникова, 2011
Саламат Исахан
Саламат Исахан
Россия, Turkistan