Yezhov_igor42
?>

Сегодня на уроке информатики обсуждали алгоритм быстрого возведения в степень. антон был внимателен и запомнил, что алгоритм нужен для того, чтобы сократить количество операций умножения при вычислении a^n. вместо n−1 умножения, которые получаются если просто вычислить произведение a⋅a⋅a⋅…⋅a (n сомножителей) можно получить гораздо меньшее число, если действовать так: если n кратно 2, то найдем сперва a^n/2, а потом умножим a^n/2 на себя если n не кратно 2, то найдем a^n–1, а потом умножим на a. например, чтобы вычислить a^10 хватит четырех умножений: сначала найдем a^2=a⋅a, потом a^4=a^2⋅a^2, потом a^5=a⋅a^4, и, наконец, a^10=a^5⋅a^5. антон также запомнил, что самые "плохие" случаи для этого алгоритма — когда n на 1 меньше точной степени двойки. теперь ему интересно узнать для какого-нибудь большого "плохого" n, а сколько умножений нужно, чтобы возвести a в степень n с этого алгоритма. антону, определите, сколько умножений сделает алгоритм для вычисления 2^n, где n= 2^13–1.

Информатика

Ответы

inikonovich

Большинство пользователей компьютеров используют программы, предназначенные для выполнения конкретных прикладных задач, таких, как подготовка и оформление документов, математические вычисления, обработка изображений и т.п. Соответствующие программные средства называют прикладными программами или прикладным программным обеспечением. Управление компонентами вычислительной системы и формирование среды для функционирования прикладных программ берёт на себя системное программное обеспечение, наиболее важной составляющей которого является операционная система.

info-mosbalkon

1)

var arr: array [1..12] of integer;

begin

 for var i := 1 to 12 do

   arr[i] := random(-48, -83);

   

 writeln(arr[3] + ' ' + arr[7] + ' ' + arr[11]);

end.

2)

var arr: array [1..9] of double;

begin

 for var i := 1 to 9 do

 begin

   arr[i] := random(15, 40);

   write(arr[i] + ' ');

 end;

 writeln();

 

 var max := arr[1];

 for var i := 2 to 9 do

 begin

   if max < arr[i] then

       max := arr[i];

 end;

 writeln('Max: ' + max);

end.

3)

var arr: array [1..15] of integer;

begin

 for var i := 1 to 9 do

 begin

   arr[i] := random(-10, 35);

   write(arr[i] + ' ');

 end;

 writeln();

 

 write('Нечетные: ');

 for var i := 1 to 9 do

 begin

   if not arr[i] mod 2 = 0 then

       write(arr[i] + ' ');

 end;

end.

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

Сегодня на уроке информатики обсуждали алгоритм быстрого возведения в степень. антон был внимателен и запомнил, что алгоритм нужен для того, чтобы сократить количество операций умножения при вычислении a^n. вместо n−1 умножения, которые получаются если просто вычислить произведение a⋅a⋅a⋅…⋅a (n сомножителей) можно получить гораздо меньшее число, если действовать так: если n кратно 2, то найдем сперва a^n/2, а потом умножим a^n/2 на себя если n не кратно 2, то найдем a^n–1, а потом умножим на a. например, чтобы вычислить a^10 хватит четырех умножений: сначала найдем a^2=a⋅a, потом a^4=a^2⋅a^2, потом a^5=a⋅a^4, и, наконец, a^10=a^5⋅a^5. антон также запомнил, что самые "плохие" случаи для этого алгоритма — когда n на 1 меньше точной степени двойки. теперь ему интересно узнать для какого-нибудь большого "плохого" n, а сколько умножений нужно, чтобы возвести a в степень n с этого алгоритма. антону, определите, сколько умножений сделает алгоритм для вычисления 2^n, где n= 2^13–1.
Ваше имя (никнейм)*
Email*
Комментарий*

Популярные вопросы в разделе

Zezyulinskii Fedor
kuchino09
miheev-oleg578
buslavgroupe
sashakrav
Irina Bakaev
saniopt
Nikita
kisuhakisa
dmitrievanata83538
fakyou170
info8
stsnab
Reznikova1075
Ubuleeva826