как начать заново проходить курс, если уже пройдено несколько лекций со сданными тестами? |
Основы теории чисел
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 копирование , выполняются для того, чтобы не испортить значения , , которые могут передаваться в наш алгоритм по указателю или ссылке.