как начать заново проходить курс, если уже пройдено несколько лекций со сданными тестами? |
Основы теории чисел
1.2 Теория сравнений и ее приложения
1.2.1 Сравнение по модулю
Определение 1.11 Числа, дающие при делении на m одинаковые остатки, называются сравнимыми по модулю . Обозначение:
.
Теорема 1.14 (признак сравнимости по модулю) Два целых числа сравнимы по модулю тогда и только тогда, когда их разность делится на
.
Итак, если два целых числа и
сравнимы по модулю
, то этот факт можно записать разными способами:
или
, где
- целое число, или
или
.
Далее, если , то есть
при делении на
дает остаток
, то
или
. Таким образом, любое целое число
всегда сравнимо с остатком
, получающимся при делении его на
.
Свойства сравнений, не зависящие от модуля
-
Отношение сравнимости удовлетворяет условиям:
- рефлексивности:
,
- симметричности: если
, то и
,
- транзитивности: если
, а
, то
.
Отношение, заданное на множестве и обладающее перечисленными свойствами, задает разбиение этого множества на непересекающиеся классы. Применительно к отношению сравнимости по модулю
это означает: все множество целых чисел разбивается на классы чисел, эти классы не пересекаются. Так, есть класс нуля: это все числа, сравнимые с нулем по модулю
,то есть делящиеся на
без остатка(включая и само число 0), класс единицы - все числа, дающие остаток 1 при делении на
, класс 2, ...,класс
. Например, пусть
. Получаем следующие классы:
( 1.2) Определение 1.12 Классы (1.2) называются классами вычетов.
- рефлексивности:
-
Сравнения по одному и тому же модулю можно почленно складывать.
-
Два сравнения по одному и тому же модулю можно почленно вычитать одно из другого.
-
К обеим частям сравнения можно прибавлять одно и то же целое число.
Следствие 1.6 Члены сравнения можно переносить из одной части сравнения в другую с противоположным знаком.
-
Сравнения по одному и тому же модулю можно почленно перемножать.
Следствие 1.7 Обе части сравнения можно возводить в одну и ту же целую неотрицательную степень: если
и
- целое неотрицательное число, то
.
- Обе части сравнения можно умножать на одно и то же целое число.
Свойства сравнений, зависящие от модуля
-
Если
и
, то
.
-
Обе части сравнения и модуль можно умножить на одно и то же целое положительное число.
-
Если
и
, то
.
Приведем следствия из свойства 9.
Следствие 1.8 Если
, т. е. если
, то из
следует
, а это означает, что обе части сравнения и модуль можно разделить на любой их общий делитель.
Большое значение имеет
Следствие 1.9 Если
, т. е. если
, то из
следует
, а это означает, что обе части сравнения можно разделить на их общий делитель, если он взаимно прост с модулем.
Пример 1.9
После деления обеих частей сравнения на.
получим
.
Делить обе части сравнения на число, не взаимно простое с модулем, вообще говоря, нельзя, так как после деления могут получиться числа, несравнимые по данному модулю.
Пример 1.10
, но
.
- Если сравнение
имеет место по нескольким разным модулям, то оно имеет место и по модулю, равному наименьшему общему кратному этих модулей.
Из рассмотренных свойств сравнений вытекает следующее общее свойство.
-
Пусть
- многочлен с целыми коэффициентами,
и
- переменные, принимающие целые значения. Тогда если
, то
.
Если
и
, то
Таким образом, в сравнении по модулю
Вместе с тем следует обратить внимание на то, что встречающиеся в сравнениях показатели степеней заменять таким образом нельзя: изотдельные слагаемые и множители можно заменять числами, сравнимыми по тому же модулю
. В частности, все числа, кратные модулю, можно заменять нулями (так как если
, то
).
и
не следует, что
.
Свойство 11 имеет ряд важных применений. В частности, с его помощью можно дать теоретическое обоснование признаков делимости.
Пример 1.11 Доказать, что при любом натуральном
число
делится на
.
Решение. Очевидно, что
,
,
.
Возведем первое сравнение в степень
, второе - в степень
, третье - в степень
. Полученные сравнения:
,
,
, сложим:
, то есть
делится на
.
Пример 1.12 Найти остаток от деления числа
на
.
Решение. Так как
, то
. Далее,
. Следовательно,
. И задача теперь сведена к следующей: найти остаток от деления
на
. Воспользуемся сравнениями:
и
. Из
следует:
. А из сравнения
следует:
. И так как сравнение имеет место по модулям
и
, то оно имеет место и по модулю
, являющемуся НОК чисел
и
. Итак,
. Но в таком случае
.
1.2.2 Возведение в степень по модулю
Пусть , нам необходимо вычислить
. В дальнейшем перед нами часто будет стоять такая задача с очень большими числами
,
,
. Очевиднейший способ вычислить
- вычислить произведение
и взять остаток от деления на
. Для этого потребуется
умножений и взятие остатка от деления огромного числа (не всегда даже его хранение в памяти может быть простым) по модулю
. Приведём оптимизации для этой задачи.
-
Из свойства
следует, что промежуточные результаты вычислений можно перед хранением брать по модулю
.
-
Сгруппируем сомножители в произведении особым образом. Пусть
,
. Имеем:
Используя пункт 1, будем все промежуточные результаты хранить по модулю . Также для деления на 2 мы будем использовать операцию сдвига бит вправо:

Микропроцессоры имеют специальные инструкции, а языки программирования - специальные операторы для оптимизированного выполнения битового сдвига, которые и следует использовать при реализации данного алгоритма.
Пункт 2 даёт следующий алгоритм возведения в степень по модулю.
Вход: ,
,
- целые неотрицательные числа.
1) Положить ![]() ![]() ![]() |
2) Повторять, пока ![]() |
2.1) Если ![]() ![]() |
2.2) Положить ![]() |
2.3) Сдвинуть биты числа ![]() ![]() |
Выход: - результат возведения
в степень
по модулю
.
Также отметим, что на шаге 1 копирование ,
выполняются для того, чтобы не испортить значения
,
, которые могут передаваться в наш алгоритм по указателю или ссылке.