Сравните бинарный алгоритм возведения в степень, метод степенного дерева и метод множителей для значений n из интервала от 1 до 100. Написать на паскеле или с++
Для сравнения бинарного алгоритма возведения в степень, метода степенного дерева и метода множителей для значений от 1 до 100 можно написать следующий код на C++:
#include <iostream> #include <chrono> using namespace std; int binaryExponentiationintx,intnint x, int nintx,intn { int res = 1; while (n > 0) { if nn % 2 == 1n { res *= x; } x *= x; n /= 2; } return res; } int powerTreeintx,intnint x, int nintx,intn { if n==0n == 0n==0 { return 1; } else if nn % 2 == 0n { int temp = powerTreex,n/2x, n/2x,n/2; return temp*temp; } else { int temp = powerTreex,n/2x, n/2x,n/2; return temp*temp*x; } } int primeFactorsintx,intnint x, int nintx,intn { int res = 1; for (int i = 2; i <= n / i; i++) { while nn % i == 0n { n /= i; x *= x; } res *= x; } if (n > 1) { res *= x; } return res; } int main { for (int i = 1; i <= 100; i++) { auto start = chrono::high_resolution_clock::now; cout << "Binary Exponentiation for " << i << ": " << binaryExponentiation2,i2, i2,i << endl; auto end = chrono::high_resolution_clock::now; cout << "Time taken: " << chrono::duration_cast<chrono::nanoseconds>end−startend - startend−start.count << "ns" << endl; start = chrono::high_resolution_clock::now; cout << "Power Tree for " << i << ": " << powerTree2,i2, i2,i << endl; end = chrono::high_resolution_clock::now; cout << "Time taken: " << chrono::duration_cast<chrono::nanoseconds>end−startend - startend−start.count << "ns" << endl; start = chrono::high_resolution_clock::now; cout << "Prime Factors for " << i << ": " << primeFactors2,i2, i2,i << endl; end = chrono::high_resolution_clock::now; cout << "Time taken: " << chrono::duration_cast<chrono::nanoseconds>end−startend - startend−start.count << "ns" << endl; } return 0; }
Этот код сначала определяет функции для бинарного алгоритма возведения в степень, метода степенного дерева и метода множителей. Затем в цикле от 1 до 100 вызываются эти функции для различных значений n, и выводятся результаты работы этих алгоритмов, а также замеряется время выполнения каждого из них.
Таким образом, можно сравнить эффективность различных методов возведения в степень для значений от 1 до 100.
Для сравнения бинарного алгоритма возведения в степень, метода степенного дерева и метода множителей для значений от 1 до 100 можно написать следующий код на C++:
#include <iostream>#include <chrono>
using namespace std;
int binaryExponentiationintx,intnint x, int nintx,intn {
int res = 1;
while (n > 0) {
if nn % 2 == 1n {
res *= x;
}
x *= x;
n /= 2;
}
return res;
}
int powerTreeintx,intnint x, int nintx,intn {
if n==0n == 0n==0 {
return 1;
} else if nn % 2 == 0n {
int temp = powerTreex,n/2x, n/2x,n/2;
return temp*temp;
} else {
int temp = powerTreex,n/2x, n/2x,n/2;
return temp*temp*x;
}
}
int primeFactorsintx,intnint x, int nintx,intn {
int res = 1;
for (int i = 2; i <= n / i; i++) {
while nn % i == 0n {
n /= i;
x *= x;
}
res *= x;
}
if (n > 1) {
res *= x;
}
return res;
}
int main {
for (int i = 1; i <= 100; i++) {
auto start = chrono::high_resolution_clock::now;
cout << "Binary Exponentiation for " << i << ": " << binaryExponentiation2,i2, i2,i << endl;
auto end = chrono::high_resolution_clock::now;
cout << "Time taken: " << chrono::duration_cast<chrono::nanoseconds>end−startend - startend−start.count << "ns" << endl;
start = chrono::high_resolution_clock::now;
cout << "Power Tree for " << i << ": " << powerTree2,i2, i2,i << endl;
end = chrono::high_resolution_clock::now;
cout << "Time taken: " << chrono::duration_cast<chrono::nanoseconds>end−startend - startend−start.count << "ns" << endl;
start = chrono::high_resolution_clock::now;
cout << "Prime Factors for " << i << ": " << primeFactors2,i2, i2,i << endl;
end = chrono::high_resolution_clock::now;
cout << "Time taken: " << chrono::duration_cast<chrono::nanoseconds>end−startend - startend−start.count << "ns" << endl;
}
return 0;
}
Этот код сначала определяет функции для бинарного алгоритма возведения в степень, метода степенного дерева и метода множителей. Затем в цикле от 1 до 100 вызываются эти функции для различных значений n, и выводятся результаты работы этих алгоритмов, а также замеряется время выполнения каждого из них.
Таким образом, можно сравнить эффективность различных методов возведения в степень для значений от 1 до 100.