Page 32 - 4395
P. 32

begin
                         зобразити n так: n = (n ...n ) ;
                                                       k-1
                                                              0 2
                         у:=1;
                         z:=x mod m;

                         for i:=0 to k-1 do
                        begin
                            if n =1 then y:=y·z mod m;
                                i
                                    z:=z·z mod m;
                         end
                        end.


                        Бінарний  метод  справа  наліво  не  потребує  знаходження
                 бінарного  зображення  числа  повністю,  тобто  обчислення  степеня
                 можна виконувати, коли утворюються біти показника степеня. Крім

                 того,  крок  множення  і  крок  піднесення  до  квадрата  (відповідно,
                 рядок 5 та рядок 6 алгоритму RL_bin_exp(x,n,m)) можна виконувати
                 паралельно. Таке не можна застосувати у випадку бінарного методу

                 зліва  направо.  Проте  варіант  зліва  направо  може  використати  той
                 факт,  що  один  операнд  на  кроці  множення  фіксований  (завжди
                 дорівнює х у рядку 5 алгоритму LR_bin_exp(x,n,m)), щоб збільшити

                 швидкість  множення.  Таке  не  можна  зробити  у  варіанті  справа
                 наліво, де операнди змінні.
                        Розглянуті алгоритми потребують [log n] піднесень до квадрата
                 та  Н(n)  множень  (Н(n)  є  вагою  Хемінга  числа  n,  тобто  кількістю

                 одиничних бітів у двійковому зображенні числа п) і, отже, 2[log n]
                 множень  у найгіршому випадку i 3[log n]/2 множень у середньому.
                 Оскільки  [log  n]  є  нижньою  границею  для  кількості  множень,

                 потрібних, щоб виконати одне піднесення до степеня у класі методів,
                 які ґрунтуються на ланцюгах з додаванням, то бінарний метод часто
                 є прийнятним.























                                                              32
   27   28   29   30   31   32   33   34   35   36   37