Бързо експонентни

За изграждането на х за силата на п, са склонни да се използва стандартен метод т.е.. Е. Броят на п пъти х се умножава по себе си. В математическия смисъл, че може да бъде решен с помощта на писалка и хартия, този метод е приемливо, тъй като функцията на мощността нараства бързо и поради това е съмнително, че операцията ще трябва да се направят поправки ръчно.

Друго нещо е, програмиране, което е важно не само за решаване на проблема, но също така да се създаде оптимално решение, което отговаря на предвидения обхват на входните данни. По този начин, по-специално, за работата на повишаване на мощността на един алгоритъм, който позволява значително да се намали броят на операциите, необходими. Това е доста проста и се основава на математически свойства на степента.

Нека да има някаква степен на х п. където х - реално число и п - естествено. След това в продължение на х н равенство:

В този случай, т * к = N. Например: 3 6 = (3 3) 2. 5 7 = (5 7) 1. Това свойство е един от основните електрически свойства, и че тя се основава на въпросния метод. Освен това, ние отбелязваме, че ако п е четно число, а след това ние имаме следното уравнение:

х п = (х п / 2) 2 = х п / 2 * х п / 2

Например, ако х = 3 и п = 6, имаме 3 6 = (3 6/2) 2 = 3 6/2 * 3 6/2. С помощта на този имот, той ще бъде в състояние значително да се намали броят на операции, необходими за изграждането на х към властта н. Сега ние се адаптират формула за случая с нечетен н. За това е необходимо да само да отидете в един по-малко степен. Например: 5 7 = 5 6 * 5, 12 5 = 12 4 * 12. Общата форма на равенство на прехода:

Програмата, която реализира алгоритъма на бързо степенуване, като се използват тези свойства: ако наш степен е дори, след това отидете до такава степен, по-малко от половината, или на мястото на съществуващите правила относно странно силата на вечерта.

програмен код за C ++:

#include "stdafx.h"
#include
използване на пространството от имена STD;
// бързо степенуване
плава bpow # 40; поплавък х, Int п # 41;
# 123;
поплавък брой = 1;
ако # 40. п # 41; върне 1;
докато # 40; п # 41;
# 123;
ако # 40; п% 2 == 0 # 41;
# 123;
п / = 2;
х * = х;
# 125;
още
# 123;
п -;
брои * = х;
# 125;
# 125;
брой на връщане;
# 125;
// основна функция
невалидни основни # 40; # 41;
# 123;
setlocale # 40; LC_ALL, "Рус" # 41; ;
поплавък х; Int п;
Cout <<"Основание> "Синди >> х;
Cout <<"Степень> "Синди >> н;
Cout <> празнота" # 41; ;
# 125;

програмен код на Паскал:

Би било добре да се сложи още един пример :) събрание код за изпълнение на тази "бърза" алгоритъм RAM ми отне = д * б * 3 (байт), където е - степен, б - дължина на първоначалния брой байтове, без да се включва стандартния вход проверява оригиналните данни 0 и 1 и доста обемисти кодови номера от умножаване RAM с различна по дължината на контура. Печалбата може да се усети само при високи степени, и това е много съмнително ..

популярен

Благодарни сме на Alekseevu Д. Р. за право, дадено на тях да се използват материали от книгата «MS Visual C ++ и Turbo C ++ Explorer»