Сравните бинарный алгоритм возведения в степень, метод
степенного дерева и метод множителей для значений n из
интервала от 1 до 100.
Написать на паскеле или с++

13 Мар 2020 в 19:44
266 +1
0
Ответы
1

Для сравнения бинарного алгоритма возведения в степень, метода степенного дерева и метода множителей для значений от 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 - startendstart.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 - startendstart.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 - startendstart.count << "ns" << endl;
}
return 0;
}

Этот код сначала определяет функции для бинарного алгоритма возведения в степень, метода степенного дерева и метода множителей. Затем в цикле от 1 до 100 вызываются эти функции для различных значений n, и выводятся результаты работы этих алгоритмов, а также замеряется время выполнения каждого из них.

Таким образом, можно сравнить эффективность различных методов возведения в степень для значений от 1 до 100.

18 Апр 2024 в 16:15
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир