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

advertisement
Алгоритм быстрого возведения в степень
Алгоритм быстрого возведения в степень — алгоритм, предназначенный для
возведения числа 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 = 101012
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
Download