Вы находитесь на странице: 1из 2

Алгоритм быстрого возведения в степень

Алгоритм быстрого возведения в степень — алгоритм, предназначенный для


возведения числа x в натуральную степень n за меньшее число умножений, чем
это требуется в определении.

Теоретические основы алгоритма

Пусть m = (mkmk-1…m1m0)2 – двоичное представление степени n. Тогда

m = mk∙2k + mk-1∙2k-1 + … + m1∙21 + m0, , где mk = 1, mi є {0, 1} и

xn = x((…((mkּ2 + mk-1)ּ2 + mk-2)ּ2 + … ) ּ2 + m1)ּ2 + m0 = ((…(((x1)2)ּxmk-1)2)…)2ּxm1)2ּxm0.

Таким образом, алгоритм быстрого возведения в степень сводится к


мультипликативному аналогу схемы Горнера.

Чтобы узнать, сколько умножений потребуется для возведения числа x в степень n


алгоритмом быстрого возведения в степень, нужно произвести вычисления по
следующей формуле: k = H + 2(E − 1), где H — количество нулей , а E - количество
единиц в двоичной записи числа n.

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

Как перевести целое число из десятичной системы в двоичную систему


счисления
Чтобы перевести целое десятичное число в двоичную систему счисления, нужно
последовательно делить с остатком ("нацело") это число, а затем получаемые
частные на основание 2 новой системы счисления до тех пор, пока частное не
станет меньше основания. При переводе запись двоичного числа следует начинать
со старшего значащего разряда, а заканчивать записью младшего значащего
разряда.
Пример перевода целого десятичного числа в двоичную систему исчисления

Переведём 21 в двоичную систему исчисления.

21= 2*10+1 – первая цифра (самый младший разряд)


10 = 2*5 +0 – вторая цифра

5=2*2+1– третья цифра

2=2*1+0– четвёртая цифра

1=2*0+1– пятая цифра

21 = (15 04 13 02 11)2

Пример алгоритма быстрого возведения в степень:

Пусть x = 3, n = 21.

1. Находим двоичное представление числа 21 = 10101 2


2. Находим число k. H = 2 – количество 0 в 101012, E = 3 – количество 1 в 101012.
В итоге k = H + E − 1 = 4.
3. a. заводим массив m[i] m[i] = (1,0,1,0,1) Внимание m[0]=1 m[1]=0 ..m[4]=1
b. Присваиваем s = x = 3; s=3
c. В цикле для I = k-1 (3) до 0 i=3 s=3*3=9
s =s * s i=2 s=9*9=81 s=81*3 = 243
если m[i] ==1 то s=s*x i=1 s= 243*243=59049
i=0 s=59049*59049=3486784401
s=3486784401*3 = 10460353203

Задания

Оценка хорошо
Реализуйте алгоритм быстрого деления. На вход программе подаётся основание
– число x и натуральная степень m в двоичной форме. На дисплей выводится
значение xm
Оценка отлично
Реализуйте алгоритм быстрого деления. На вход программе подаётся основание –
число x и натуральная степень m в десятичной форме. На дисплей выводится
значение xm