Сейчас на уроке информатики обсуждали метод быстрого возведения в ступень. Антон

Сейчас на уроке информатики обговаривали алгоритм быстрого возведения в ступень. Антон был очень внимателен и запомнил, что метод нужен для того, чтоб уменьшить количество операций умножения при вычислении a^n. Заместо n1умножения, которые получаются если просто вычислить творенье aaaa (n сомножителей) можно получить еще меньшее число, если действовать так: o если n кратно 2, то найдем сначала a^(n/2), а позже умножим a^(n/2) на себя o если n не кратно 2, то найдем a^(n1), а позже умножим на a. Например, чтоб вычислить a10 хватит четырех умножений: 3. поначалу найдем a^2=aa, 4. позже a^4=a^2a^2, 5. потом a^5=aa^4, 6. и, в конце концов, a^10=a^5a^5. Антон также запомнил, что самые "нехорошие" случаи для этого метода когда n на 1 меньше точной ступени двойки. Теперь ему занимательно выяснить для какого-нибудь великого "отвратительного" n, а сколько умножений необходимо, чтобы возвести a в ступень n с поддержкою этого метода. Помогите Антону, обусловьте, сколько умножений сделает метод для вычисления 2n, где n= 2^121. Хоть какой язык

Задать свой вопрос
1 ответ

Никакой язык здесь не нужен. Задачка математическая.

Поначалу, давайте определим функции:

1) Для всех естественных n,

\displaystyle f(n)= \left \ f(n/2)+1\,, \textif  n \equiv 0 \pmod 2\atop f(n-1)+1\,,\textif  n\equiv 1 \pmod 2 \land n\neq1  \right., f(1)=0

Явно, что эта функция одинакова количеству умножений, которые необходимо выполнить используя данный метод (для того чтоб вычислить a^n).

2) Для все естественных n,

L(n) = f(2^n-1).

Таким образом, нам требуется вычислить

f(2n)=f(n)+1=f(2^12-1)+1=L(12)+1

Заметим, что

L(n+1)=L(n)+2

L(1)=0

Т.к.

f(2^n+1-1)=f(2^n+1-2)+1=f(2(2^n-1))+1=f(2^n-1)+2

f(2^1-1)=f(1)=0

Используя математическую индукцию, легко доказать что для всех ngt;1,

L(n)=2(n-1)  

Как следует,

f(2n)=L(12)+1=2\cdot 11 +1=23

Эмилия Петрейкина
Подскажите сколько умножений сделает метод для вычисления 2^n, где n= 2^(13)1.
Михаил
будет 25, если следовать решению выше
Антон Зоркольцев
Хоть я и запоздал с комментарием, отвечаю: Просто обосновать с помощью индукции что f(2^n)=n. Как следует метод сделает ровно n операций. В данном случае 2^(13)-1.
, оставишь ответ?
Имя:*
E-Mail:


Добро пожаловать!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт