Алгоритм квадратных корней

Ввод: целое число n > 2.

Вывод: целая часть квадратного корня из n.

Шаг 1. Начинаем с присвоений: X = n и У = [(n + 1)/2] и переходим к шагу 2.

Шаг 2. Если X = У, то останавливаемся и выписываем Х; в противном случае переходим к шагу 3.

Шаг 3. Заменяем значение X на текущее значение У, а переменной Y присваиваем значение [(X2 + n) / 2Х] и возвращаемся к шагу 2.

Модульное возведение в степень AB mod n

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

где коэффициенты могут принимать значения 0 или 1. Таким образом,

Заметим, что может быть равно 1 (если bо = 0) или а (если bо = 1). Обозначив через P1, получаем

Теперь положим . Тогда

Продолжая начатую процедуру, мы определяем последователь­ность целых чисел где . Конечно, поскольку мы делаем вычисления с элементами из Zn, нам надлежит находить вычет всех произведений по модулю n на ка­ждом шаге алгоритма.

Обратите внимание на то, что на каждом этапе мы ли­бо возводим в квадрат число, либо вычисляем произведение Более того, если на каком-то шаге нам попалось нулевое значение bi, нам совершенно не нужно вычислять .

На практике представление показателя е в двоичной си­стеме счисления происходит одновременно с вычислением сте­пени. Так, например, если е нечетно, то bо = 1, в противном случае, bо = 0. Аналогично, основываясь на четности или не­четности числа

можно определить значение b1. Заметьте, что выписанная сум­ма равна одному из следующих отношений: е / 2, если е — чет­но, и (е - 1) / 2, если оно нечетно. Формализованный алгоритм выглядит следующим образом:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: