Вычислите i 1 i: Mathway | Популярные задачи

3 6 Risolvere per ? cos(x)=1/2 7 Risolvere per x sin(x)=-1/2 8 Преобразовать из градусов в радианы 225 9 Risolvere per ? cos(x)=( квадратный корень из 2)/2 10 Risolvere per x cos(x)=( квадратный корень из 3)/2 11 Risolvere per x sin(x)=( квадратный корень из 3)/2 12 График g(x)=3/4* корень пятой степени из x
13 Найти центр и радиус x^2+y^2=9 14 Преобразовать из градусов в радианы 120 град. 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

(1/3) как 1/7 в Python?

Мне нравится включать 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(), результатом обычно будет комплексное число, а это не то, на что вы надеялись.

, если вы хотите работать только с целыми числами (и игнорировать сложные решения вашей функции), это может быть способом.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *