Редакция для Степень числа
Submitting an official solution before solving the problem yourself is a bannable offence.
Автор:
Разбор задачи «Степень числа»
1. Идея
Нужно вычислить число a в степени b, то есть произведение b одинаковых множителей a.
По условию требуется сделать это именно через цикл:
- завести переменную
res = 1; bраз умножить её наa.
Это напрямую соответствует определению степени:
a^0 = 1,a^1 = a,a^2 = a * a,- и так далее.
2. Наблюдения
Наблюдение 1
Если b = 0, то множителей нет вообще, и по определению результат равен 1.
Именно поэтому начальное значение переменной результата должно быть 1.
Наблюдение 2
После каждого умножения на a значение res становится на одну степень больше:
- сначала
res = 1, этоa^0, - после первого умножения
res = a, этоa^1, - после второго умножения
res = a * a, этоa^2, - ...
- после
bумножений получимa^b.
Наблюдение 3
Ограничения маленькие: b <= 18, поэтому обычный цикл полностью подходит.
3. Алгоритм
- Считать
aиb. - Создать переменную
resи присвоить ей1. - Повторить
bраз:- умножить
resнаa.
- умножить
- Вывести
res.
4. Почему это работает
Докажем по шагам.
Изначально res = 1. Это правильно, потому что до начала цикла произведение нуля множителей равно 1, то есть a^0.
Дальше на каждом шаге цикла мы делаем:
res = res * a.
Если до текущего шага в res было значение a^k, то после умножения станет a^(k+1).
Значит:
- после 0 шагов имеем
a^0, - после 1 шага имеем
a^1, - после 2 шагов имеем
a^2, - ...
- после
bшагов имеемa^b.
Именно это и требуется найти.
5. Сложность
Цикл выполняется b раз, в каждой итерации одна операция умножения.
- Время:
O(b) - Память:
O(1)
6. Код на C++17
#include <iostream>
using namespace std;
int main() {
long long a;
int b;
cin >> a >> b;
long long res = 1;
for (int i = 0; i < b; i++) {
res *= a;
}
cout << res << '\n';
return 0;
}
7. Код на Python 3
a, b = map(int, input().split())
res = 1
for _ in range(b):
res *= a
print(res)
Комментарии