Сумма факториалов
Вы решили задачу. Теперь можно сравнить подходы.
Вычисляем следующий факториал из предыдущего и добавляем в сумму.
Авторский разбор для локальной версии на основе условия задачи. Это не выгрузка чужих посылок и не официальное решение исходного сайта.
Ваше принятое решение
Рекомендуемое решение: Накопление факториала
После умножения на 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) бит для результата.
На что обратить внимание
- Нужен один цикл, без повторного вычисления факториалов.
- Не включайте 0! в сумму.
Рекомендация учитывает сложность и читаемость для этой задачи. Единственного самого быстрого решения для всех размеров входа и всех компьютеров может не быть.