Информатика, вопрос задал Abij5558 , 7 лет назад

Сколько потребуется умножений для возведения числа х в степень n=147, если построить для этого эффективный алгоритм?

Ответ:

Ответы на вопрос

Ответил MrSolution
0

Ответ:

(см. объяснение)

Объяснение:

Решая задачу "в лоб", нам потребовалось бы умножить число само на себя ровно 147 раз. Это много, потому попробуем оптимизировать алгоритм. Заметим, что 147_{10}=10010011_{2}, а x^{147}=x^{128}\times x^{16}\times x^2\times x^1. Изначально имеем число x. Пусть y=147 - степень. Пусть res=1 - наш будущий ответ. На каждой итерации цикла будем умножать x сам на себя, а y целочисленно делить на 2. При этом заметим, что когда y\%2>0, то нам надо умножить текущий результат r на x. Таким образом, всего за 8 итераций (вместо 147!) мы можем возвести некоторое число в степень 147.

Покажем, как написать это на C++:

#define ll long long

ll bpow(ll x, ll y) {

   ll r = 1;

   while (y > 0) {

       if (y % 2 > 0) {

           r *= x;

       }

       x *= x;

       y /= 2;

   }

   return r;

}

Задание выполнено!


Abij5558: Скажите, пожалуйста, а что вписывать в ответ?
Новые вопросы