Редакция для Степень числа


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.

Автор: montes332

Разбор задачи «Степень числа»

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. Алгоритм

  1. Считать a и b.
  2. Создать переменную res и присвоить ей 1.
  3. Повторить b раз:
    • умножить res на a.
  4. Вывести 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)

Комментарии

Еще нет ни одного комментария.