Мини-урок · перед практикой

Сумма факториалов

Вычисляем следующий факториал из предыдущего и добавляем в сумму.

Как к ней подойти

Научитесь замечать повторяющееся действие и аккуратно собирать результат в цикле for.

Коротко о теме

Цикл for подходит, когда известно, сколько раз нужно повторить действие. Перед циклом задайте начальное значение результата, внутри обновляйте его, а после цикла выводите итог. Проверьте, входит ли последняя граница в range().

Ключевая идея · Накопление факториала

После умножения на i накопитель равен i!, поэтому не нужно вычислять каждый факториал заново.

Проверьте перед запуском

  • Нужен один цикл, без повторного вычисления факториалов.
  • Не включайте 0! в сумму.

Сравните свой подход

Ниже - готовое решение, другой способ, если он есть, и важные детали проверки.

Ваше принятое решение

Рекомендуемое решение: Накопление факториала

После умножения на i накопитель равен i!, поэтому не нужно вычислять каждый факториал заново.

n = int(input())
factorial = 1
total = 0
for i in range(1, n + 1):
    factorial *= i
    total += factorial
print(total)

Время: O(n) операций с растущими целыми. Память: O(1) целых чисел; O(n log n) бит для результата.

Другой способ: Схема Горнера с конца

Сумма записывается как 1·(1 + 2·(1 + 3·(1 + … + n))). Обрабатываем вложенные скобки от n к 1 за один цикл, без math.

n = int(input())
total = 0
for i in range(n, 0, -1):
    total = i * (1 + total)
print(total)

Время: O(n) операций с растущими целыми. Память: O(1) целых чисел; O(n log n) бит для результата.