2+n-72)=1/(n+9)python — Как вычислить сумму 1!+2!+3!+…+n!
Вопрос задан
Изменён 6 месяцев назад
Просмотрен 27k раза
Условие задачи:
По данному натуральном n вычислите сумму 1!+2!+3!+…+n!. В решении этой задачи можно использовать только один цикл. Пользоваться математической библиотекой math в этой задаче запрещено.
n = int(input())
N = 1
sum = 0
for a in range(1, n+1):
for b in range(1, a+1):
N = N * b
sum += N
print(sum)
Однако у меня решение не выходит. Подскажите, как решить правильно?
- python
- python-3.x
- ряды
1
Если на вход подаются только натуральные n, то можно так:
n = int(input())
sum_of_factorials = 1
curr_factorial = 1
for i in range(2, n + 1):
curr_factorial *= i
sum_of_factorials += curr_factorial
print(sum_of_factorials)
(Вам же нужно 1!+2!+3!+. ? Или вы не опечатались? Если нет, то
..+n!sum_of_factorials просто на 2 домножить в конце и отнять 1).
Это весьма простое динамическое программирование. Вам не нужно каждый раз заново вычислять curr_factorial, чтобы его прибавить, т.к. нынешний curr_factorial — это просто старое значение, домноженное на номер текущего цикла итерации.
0
n = int(input())
suma = 0
previous = 1 # Предыдущий факториал
for i in range(1, n + 1):
current = previous * i # Текущий факториал - см. примечание после кода
suma += current
previous = current
print(suma)
Здесь используется факт, что факториал числа равен факториалу предыдущего числа умноженный на текущее число — например 5! == 4! * 5, потому что
5! == 1 * 2 * 3 * 4 * 5 == (1 * 2 * 3 * 4) * 5 == 4! * 5
number = int(input())
spicok = list(range(1,number+1))
factorial_current=1
summa=0
for n in spicok:
factorial_current = factorial_current*n
summa += factorial_current
print(summa)
n = int(input()) s = 0 res = 1 for i in range (1, n+1): res *= i s = s + res print(s)
1
Можно было решать, используя библиотеку math.
from math import factorial
n = int(input())
sum = 0
for i in range(1, n+1):
sum += factorial(i)
print(sum)
3
Предлагаю начать с конца:
n = int(input()) s = 0 for i in range(n, 0, -1): s = (s+1) * i print(s)
или
from functools import reduce n = int(input()) print(reduce(lambda s, i: (s+1) * i, range(n, 0, -1)))
Эту задачу можно решить, используя вложенный цикл:
res1 = 1
res2 = 0
number = int(input('Введите число: '))
for i in range(1, number + 1):
for j in range(1, i + 1):
res1 *= j
res2 += res1
res1 = 1
print(res2)
Он был так близок !!!
n = int(input("Введите факториал : "))
f=1
summ=0
for i in range(2, n+1):
for j in range (1,i+1):
f = f * j
summ+=f
print("Ваш факториал равен =",summ)
# (ввод - 5)(вывод - 34 560 )
1
numberN = int(input("Введите число N: "))
while numberN < 0: # фильтр отриц.
чисел
numberN = int(input('Число N < 0. Введите N >= 0: '))
factorial = 1
total = 0
for numbers in range(1, numberN + 1):
factorial *= numbers
total += factorial
if total == 0: # исключение для N = 0
total = 1
print(total)
1
from math import factorial
print(f"{factorial(int(input()))}")
так не проще?
1
Мне нравится включать Python в мои исследования функций, однако я столкнулся с поведением, которого я не ожидал или не хотел для этих оценок.
>>> определение ч(х): ... вернуть -1 / х**(1/3) ... >>> ч(-343) (-0,07142857142857145 + 0,12371791482634838j)
Мне нужна настоящая обратная функция для следующей функции:
>>> def f(x): ... вернуть х**3 ... >>> f(-7) -343
Такой, что:
>>> определение ч(х): ... вернуть -1/inverse_f(x) ... >>> ч(-343) 0,14285714285714285
Есть ли способ Pythonic добиться такого поведения?
- питон
- математика
- возведение в степень
8
У вас возникают проблемы, потому что отрицательное число, возведенное в дробную степень, может быть комплексным числом.
Решение состоит в том, чтобы применить математическую идентичность. Мы знаем, что если x является отрицательным, тогда x 1/3 равно -((- x ) 1/3 ). Другими словами, мы превращаем x в положительное число, извлекаем кубический корень и снова отрицаем его. Вот код Python для этого:
def h(x):
если х >= 0:
возврат -1,0/х**(1,0/3,0)
иначе: # х < 0
вернуть -ч(-х)
Чтобы объяснить, почему вы сталкиваетесь с проблемой, полезно взглянуть на реализацию х**у (энергетик).
Ключевое математическое тождество состоит в том, что x y = exp(log( x ) · y ). Это тождество упрощает работу со степенями, потому что показатель степени рассматривается как обычное число и не нуждается в анализе (целое ли это число? дробное число? отрицательное число? и т. д.).
Когда x является положительным числом, log( x ) является действительным числом. Поскольку y также является действительным числом, exp(log( x ) · y ) будет действительным числом.
Но когда x является отрицательным числом, log( x ) является комплексным числом. В частности, оно равно [log(- x ) + π · i ]. Когда мы умножаем такое комплексное число на y , а затем применяем exp(), результатом обычно будет комплексное число, а это не то, на что вы надеялись.
, если вы хотите работать только с целыми числами (и игнорировать сложные решения вашей функции), это может быть способом.

чисел
numberN = int(input('Число N < 0. Введите N >= 0: '))
factorial = 1
total = 0
for numbers in range(1, numberN + 1):
factorial *= numbers
total += factorial
if total == 0: # исключение для N = 0
total = 1
print(total)
.. вернуть -1/inverse_f(x)
...
>>> ч(-343)
0,14285714285714285