Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VIZO_for_print_.doc
Скачиваний:
3
Добавлен:
01.03.2025
Размер:
1.75 Mб
Скачать

8.Краткие сведения из теории чисел

7.2.1. Модульная арифметика

Действия в целочисленной модульной арифметике совершаются с целыми числами. Если с помощью resn (x) обозначить остаток от деления x на n, то результаты сложения, вычитания и умножения по модулю n определяются соответственно равенствами:

(a + b)  mod n = resn (a + b),      (ab)  mod n = resn(a + (– b)), – b mod n = resn (nb),      ab mod = resn (ab).

Легко проверить, что

(a + b) mod n = ((a mod n) + (b mod n)) mod n,

a b mod n = ((a mod n) (b mod n)) mod n.

Для действий в модульной арифметике справедливы те же законы, что и в обычной: коммутативный (переместительный)

(a +b) = (b+a) mod n, ab = ba mod n,

ассоциативный (сочетательный)

(a +(b+c)) = ((a+b)+c) mod n, a (bc) = (ab) c mod n,

и дистрибутивный (распределительный)

a (b + c) = ab + ac mod n.

Функция Эйлера (x) определяет число целых чисел из промежутка от 1 до – 1 взаимно простых с целым числом x. Если p – простое число, то, очевидно, оно взаимно простое со всеми меньшими натуральными числами. Поэтому для простого числа

(p) = p – 1.

Данная формула является частным случаем формулы для степени простого числа

(pn) = pn – pn  1.

Для взаимно простых чисел x и y функция Эйлера мультипликативна:

(mn) = (m) (n).

В дальнейшем будет использована теорема Эйлера и ее частный случай, малая теорема Ферма.

Теорема Эйлера. Если a и m взаимно простые целые числа, то

a (m) = 1  mod m.

Теорема Ферма. Если a и p взаимно простые целые числа, где простое число, то

a p  1 = 1  mod p.

Действия целочисленной модульной арифметики должны выполняться абсолютно точно безо всякого округления. Если разрядность вычислительной машины не позволяет выполнить это условие, то используются специальные программы повышенной точности.

Действия сложения, вычитания и умножения являются простыми в том смысле, что для их выполнения требуется число операций, которое описывается полиномиальной функцией от числа разрядов чисел, с которыми совершаются вычисления. Сложные операции – это такие, которые требуют для своего выполнения число операций, определяемое некоторой экспонентой. Показатель такой экспоненты зависит от числа разрядов чисел, участвующих в операции.

Рассмотрим далее некоторые операции и функции в поле целых чисел, где сложность операций определяется числом двоичных действий, выполняемых для получения результатов, и оценивается с помощью функции 0 (п). Пусть даны две последовательности f (n) и g (n), тогда считают, что последовательность f (n) растет как 0 (g (n)), если существует такая ненулевая константа С, что отношение f (n)/g (n) стремится к С вместе с ростом п.

7.2.2. Возведение в степень

Прямой метод возведения в степень

y  = a x  mod =

a·a·a·a…·a

mod n,

   раз  

где x – натуральное число, на первый взгляд, кажется сложной операцией, поскольку число перемножений пропорционально показателю степени x и экспоненциально зависит от числа разрядов x. Однако существует быстрый алгоритм возведения в степень, число операций в котором пропорционально лишь числу разрядов показателя степени x.

Метод быстрого возведения в степень основан на представлении показателя степени x в двоичной форме:

x = x0 + 2x1 + ... + 2k – 1 xk – 1,

где xi – элемент двоичного представления, т.е. xi = 0 или 1, а k – число двоичных разрядов. Тогда

.

Из этого выражения видно, что число перемножений последовательных квадратов числа a равно числу ненулевых двоичных разрядов xi. С учетом возведения в квадрат общее число умножений при возведении в степень x не более 2 log x. В свою очередь известно, что каждое умножение k разрядных двоичных чисел требует выполнения примерно 0 (k log k) двоичных операций.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]