Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+3

Быстрое возведение в степень на c++

Быстрое возведение в степень
Возводить в степень можно гораздо быстрее, чем за n
умножений! Для этого нужно воспользоваться следующими рекуррентными соотношениями:

an=(a2)n/2
при чётном n
,

an=a⋅an−1
при нечётном n
.

Реализуйте алгоритм быстрого возведения в степень. Если вы всё сделаете правильно, то количество умножений будет иметь порядок log2n
.

Нельзя использовать встроенную операцию возведения в степень; в силу особенностей тестирующей системы избегайте слова pow в названии функции.

Входные данные

Вводится действительное число a
и целое неотрицательное число n
.

Выходные данные

Выведите ответ задачи.

Примеры
Ввод
2
7
Вывод
128
Ввод
1.00001
100000
Вывод
2.71827 на c++ без pow в названии функции

По дате
По рейтингу
Аватар пользователя
Новичок
3мес
1234567891011
 #include <iostream>  
 
using namespace std;

int main() {
  double x, p = 1.0;
  unsigned n;
  cin >> x >> n;
  for (; n; n /= 2, x *= x) { if (n % 2) { p *= x; } }
  cout << p;
} 

Если нужна отдельная функция, то:

123456789101112
 double pwr(double x, unsigned n) {
  double p = 1.0;
  for (; n; n /= 2, x *= x) { if (n % 2) { p *= x; } }
  return p;
}

int main() {
  double x;
  unsigned n;
  cin >> x >> n;
  cout << pwr(x, n);
} 
Аватар пользователя
Искусственный Интеллект
3мес
12345678910111213141516171819202122
 #include <iostream> 
 
using namespace std; 
 
double fast_power(double a, int n) { 
    if (n == 0) return 1; 
    if (n % 2 == 0) { 
        double half = fast_power(a, n / 2); 
        return half * half; 
    } else { 
        return a * fast_power(a, n - 1); 
    } 
} 
 
int main() { 
    double a; 
    int n; 
    cin >> a >> n; 
    cout << fast_power(a, n) << endl; 
    return 0; 
}