exponentiation rapidă

Pentru construcția x la puterea n, tind să utilizeze o anume metoda standard. E. Numărul de n ori x este înmulțit cu ea însăși. În sens matematic, care pot fi rezolvate cu ajutorul creion și hârtie, această metodă este acceptabilă, pentru că funcția de putere crește rapid și, prin urmare, este îndoielnic că operațiunea va trebui să facă manual remedieri.

Un alt lucru este de programare, ceea ce este important nu numai pentru a rezolva problema, dar, de asemenea, pentru a crea o soluție optimă care satisface intervalul prescris a datelor de intrare. Astfel, în special, pentru funcționarea ridicarea la puterea unui algoritm care permite reducerea semnificativă a numărului de operații necesare. Este destul de simplu și se bazează pe proprietățile matematice ale gradului.

Să fie un anumit grad de x n. unde x - un număr real și n - naturale. Apoi, pentru x n egalitate:

În acest caz, m * k = n. De exemplu: 6 = 3 (3 3) 2. 5 7 = (5 7) 1. Această proprietate este una dintre principalele proprietăți de putere, și că aceasta se bazează pe metoda respectivă. Mai mult, observăm că dacă n este un număr par, atunci avem următoarea ecuație:

x n = (x n / 2) 2 = x n / 2 * x n / 2

De exemplu, dacă x = 3 și n = 6, avem 6 = 3 (3 6/2) 2 = 3 6/2 * 3 6/2. Folosind această proprietate, acesta va fi în măsură să reducă în mod semnificativ numărul de operații necesare pentru construirea de x la puterea n. Acum ne-am adapta formula pentru cazul impare. Pentru aceasta este nevoie să meargă doar la un grad mai mic. De exemplu: 5 7 = 5 6 * 5, 5 = 12 12 4 * 12. Forma generală a egalității de tranziție:

Programul care implementează algoritmul de exponentiere rapid, folosind aceste proprietăți: în cazul în care gradul n este chiar, atunci du-te în măsura în care mai puțin de jumătate, sau să înlocuiască normele existente privind puterea ciudată de seara.

cod de program la C ++:

#include "stdafx.h"
#include
using namespace std;
// exponentiere rapid
float bpow # 40; float x, int n # 41;
# 123;
count float = 1;
dacă # 40;. n # 41; întoarce 1;
în timp ce # 40; n # 41;
# 123;
dacă # 40; n% 2 == 0 # 41;
# 123;
n / = 2;
x * = x;
# 125;
altfel
# 123;
n -;
conta * = x;
# 125;
# 125;
numărul de întoarcere;
# 125;
// funcție principală
void main # 40; # 41;
# 123;
setlocale # 40; LC_ALL, "Rus" # 41; ;
float x; int n;
cout <<"Основание> „Cin >> x;
cout <<"Степень> „Cin >> n;
cout <> void" # 41; ;
# 125;

cod de program pe Pascal:

Ar fi bine pentru a pune un alt exemplu de cod :) de asamblare pentru a pune în aplicare acest lucru special, „rapid“ algoritm RAM a luat-mi = e * b * 3 (byte), în cazul în care e - studii, b - lungimea octeților numărul inițial, fără a include intrarea standard verifică datele originale la 0 și 1 și destul de voluminoase de cod de multiplicare a numerelor din memoria RAM, cu diferite de-a lungul lungimii buclei. Câștigul poate fi simțit doar la grade înalte, și este foarte discutabilă ..

popular

Suntem recunoscători Alekseevu E. R. pentru dreptul acordat acestora de a utiliza materialele din cartea «MS Visual C ++ și Turbo C ++ Explorer»