Как найти сумму факториалов python

Условие задачи:

По данному натуральном 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)    

Однако у меня решение не выходит.
Подскажите, как решить правильно?

Stanislav Volodarskiy's user avatar

задан 29 июл 2018 в 16:44

Бронеслав's user avatar

БронеславБронеслав

1992 золотых знака6 серебряных знаков13 бронзовых знаков

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 — это просто старое значение, домноженное на номер текущего цикла итерации.

EzikBro's user avatar

EzikBro

1,8891 золотой знак6 серебряных знаков21 бронзовый знак

ответ дан 29 июл 2018 в 16:54

Влад Сивирин's user avatar

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

ответ дан 29 июл 2018 в 16:57

MarianD's user avatar

MarianDMarianD

14.1k3 золотых знака18 серебряных знаков29 бронзовых знаков

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)

MarianD's user avatar

MarianD

14.1k3 золотых знака18 серебряных знаков29 бронзовых знаков

ответ дан 10 окт 2020 в 15:12

user410511's user avatar

n = int(input())
s = 0
res = 1

for i in range (1, n+1):
   res *= i
   s = s + res

print(s)

S. Nick's user avatar

S. Nick

70.2k96 золотых знаков36 серебряных знаков55 бронзовых знаков

ответ дан 28 окт 2021 в 20:08

Anton Sergeev's user avatar

1

Можно было решать, используя библиотеку math.

from math import factorial
n = int(input())
sum = 0
for i in range(1, n+1):
    sum += factorial(i)
print(sum)

ответ дан 28 фев 2022 в 18:26

Горностайка's user avatar

ГорностайкаГорностайка

231 серебряный знак10 бронзовых знаков

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)))

ответ дан 9 мая 2022 в 21:22

TigerTV.ru's user avatar

TigerTV.ruTigerTV.ru

3,1851 золотой знак10 серебряных знаков21 бронзовый знак

Эту задачу можно решить, используя вложенный цикл:

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)

aleksandr barakin's user avatar

ответ дан 17 мая 2022 в 7:00

lukson's user avatar

Он был так близок !!!

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 )

4500zenja's user avatar

4500zenja

3,8924 золотых знака9 серебряных знаков22 бронзовых знака

ответ дан 9 мая 2022 в 20:14

Viron Vr's user avatar

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)

ответ дан 14 июн 2022 в 17:32

Sam's user avatar

1

from math import factorial
print(f"{factorial(int(input()))}")

так не проще?

aleksandr barakin's user avatar

ответ дан 3 фев 2021 в 6:27

Евгений's user avatar

1

Задача «Сумма факториалов» Решение

Условие

По данному натуральном nn вычислите сумму 1!+2!+3!+…+n!. В решении этой задачи можно использовать только один цикл. Пользоваться математической библиотекой math в этой задаче запрещено.

Решение

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

Комментарии

  1. n = int(input())
    partial_factorial = 1
    partial_sum = 0
    for i in range(1, n + 1):
    partial_factorial *= i
    partial_sum += partial_factorial
    print(partial_sum)

  2. res = 1
    sum = 0
    n = int(input())
    for i in range(1, n + 1):
    res *= i
    sum += res
    print(sum)

    1. не правильно

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

B=0
A=1
m=int(input("input a number please "))
for k in range (1,m+1) :
    for i in range (1,k+1) :
    A=i*A
    B=B+A
print("this is your number",B)

if i type 4 ,this gives me 418 , it’s supposed to give me 32, what am i doing wrong here?

I’ve tried everything to correct it

Edit : this to calculate the sum of factorials , if i type 4 it will calculate 1! + 2! + 3! + 4!

asked Feb 25, 2015 at 19:07

user31731's user avatar

1

You forgot to reset A to 1 before the i loop. The correct answer should be:

B=0
A=1
m=int(input("input a number please "))
for k in range (1,m+1):
    A=1
    for i in range (1,k+1):
        A=i*A
    B=B+A
print("this is your number",B)

answered Feb 25, 2015 at 19:09

Tuan Anh Hoang-Vu's user avatar

3

Solution 1

You can use:

math.factorial(x)

Initialize a sum with 0, use a for loop and add the result of the above line to the sum:

from math import factorial
s=0
m=4
for k in range (1,m+1) :
    s=s+factorial(k)
print (s)

Solution 2

Manually:

s=0
m=4
for i in range(1,m+1):
    p=1
    for k in range(1,i+1):
        p*=k
    s+=p
print (s)

answered Feb 25, 2015 at 19:12

ROMANIA_engineer's user avatar

ROMANIA_engineerROMANIA_engineer

53.8k29 gold badges201 silver badges196 bronze badges

1

or you could try:

partial_sum = 0
current_factorial = 1
for i in range(1, int(input()) + 1):
  current_factorial *= i
  partial_sum += current_factorial
print(partial_sum)

answered Nov 23, 2018 at 10:34

Jaiden Schneider's user avatar

XorG

0 / 0 / 0

Регистрация: 28.12.2020

Сообщений: 22

1

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

13.02.2021, 18:28. Показов 27570. Ответов 10

Метки python для начинающих, цикл for (Все метки)


Студворк — интернет-сервис помощи студентам

По данному натуральном n вычислите сумму 1!+2!+3!+…+n!. В решении этой задачи можно использовать только один цикл.

Входные данные

Вводится натуральное число n.

Выходные данные

Выведите ответ на задачу.

Примеры

Входные данные
3
Выходные данные
9

Добавлено через 6 минут
Почему-то мой код не проходит полное решение,не понимаю почему?

Python
1
2
3
4
5
6
7
n=int(input())
f=1
s=0
for i in range(1,n+1):
    s=s+f*i
    f=i
print(s)



0



amator_C

260 / 165 / 54

Регистрация: 03.05.2019

Сообщений: 339

13.02.2021, 19:12

2

Цитата
Сообщение от XorG
Посмотреть сообщение

f=i

Python
1
f *= i

Ещё более краткие решения:

Python
1
2
3
from math import factorial
 
sum([factorial(x) for x in range(1, int(input('n = ')) + 1)])
Python
1
2
3
4
from math import factorial
from functools import reduce
 
reduce(lambda s, x: s + factorial(x), range(1, int(input('n = ')) + 1))

Если разрешено использовать готовую функцию:

Python
1
2
3
s = 0
for x in range(1, int(input('n = ')) + 1):
    s += factorial(x)

Или нужно написать свою:

Python
1
2
3
def factorial(n):
    return reduce(lambda p, x: p * x, range(1, n + 1))
factorial = lambda n: reduce(lambda p, x: p * x, range(1, n + 1)) # функциональная запись



1



0 / 0 / 0

Регистрация: 28.12.2020

Сообщений: 22

13.02.2021, 20:34

 [ТС]

3

Спасибо за ответ,но решение должно быть без import math и без функций,используется только цикл
А что здесь неправильного в том,что я к f присваиваю i,если всё равно я потом умножаю f на i и прибавляю к s,получается тоже самое,если несложно приведите пожалуйста полный код

Цитата
Сообщение от amator_C
Посмотреть сообщение

Python
f *= i



0



amator_C

260 / 165 / 54

Регистрация: 03.05.2019

Сообщений: 339

13.02.2021, 22:14

4

Python
1
2
3
4
5
6
7
n = int(input())
f = 1
s = 1
for i in range(2, n + 1):
    s += f * i
    f *=i
print(s)

Цитата
Сообщение от XorG
Посмотреть сообщение

к f присваиваю i

У вас же f должен включать в себя и предыдущее произведение, а вы постоянно только инкрементируете его.



3



Catstail

Модератор

Эксперт функциональных языков программированияЭксперт Python

35555 / 19455 / 4071

Регистрация: 12.02.2012

Сообщений: 32,492

Записей в блоге: 13

13.02.2021, 22:15

5

Python
1
2
3
4
5
6
7
8
n=int(input())
f=1
s=0
for i in range(1,n+1):
    f=f*i
    s=s+f
   
print(s)



1



Arsegg

3484 / 2091 / 560

Регистрация: 02.09.2015

Сообщений: 5,336

13.02.2021, 22:20

6

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
In [1]: n = int(input())
3
 
In [2]: x = 1
 
In [3]: s = 0
 
In [4]: for i in range(1, n + 1):
   ...:     x *= i
   ...:     s += x
   ...:
 
In [5]: print(s)
9



1



Catstail

Модератор

Эксперт функциональных языков программированияЭксперт Python

35555 / 19455 / 4071

Регистрация: 12.02.2012

Сообщений: 32,492

Записей в блоге: 13

13.02.2021, 22:27

7

А можно и совсем без циклов:

Python
1
2
3
4
5
6
7
def task(n,s=0,f=1,k=2):
    if n==0:
        return s
    else:
        return task(n-1,s+f,f*k,k+1)
        
print(task(6))



2



36 / 51 / 11

Регистрация: 14.01.2021

Сообщений: 406

13.02.2021, 22:36

8

Цитата
Сообщение от Catstail
Посмотреть сообщение

def task(n,s=0,f=1,k=2):
    if n==0:
        return s
    else:
        return task(n-1,s+f,f*k,k+1)

рекурсия?



0



97 / 93 / 81

Регистрация: 10.01.2016

Сообщений: 662

Записей в блоге: 13

13.02.2021, 22:39

9

факториал решается только через рекурсию, чтобы меньше захватывало памяти, используем memorize.



0



Catstail

Модератор

Эксперт функциональных языков программированияЭксперт Python

35555 / 19455 / 4071

Регистрация: 12.02.2012

Сообщений: 32,492

Записей в блоге: 13

13.02.2021, 23:00

10

Цитата
Сообщение от SW Developer
Посмотреть сообщение

факториал решается только через рекурсию

— да почему же? Гораздо проще (особенно в Питоне) — прямым вычислением:

Python
1
2
3
4
f=1
for i in range(2,n+1):
    f*=i
print(f)

Добавлено через 31 секунду

Цитата
Сообщение от gray621
Посмотреть сообщение

рекурсия?

— она. Зато без циклов.



0



0 / 0 / 0

Регистрация: 28.12.2020

Сообщений: 22

13.02.2021, 23:37

 [ТС]

11

Спасибо всем кто ответил!



0



Занятие 4. Цикл for

Задача «Сумма факториалов»


Условие

По данному натуральном (n) вычислите сумму (1!+2!+3!+…+n!). В решении этой задачи можно использовать только один цикл. Пользоваться математической библиотекой math в этой задаче запрещено.


Во всех задачах считывайте входные данные через input() и выводите ответ через print().


Тесты

Входные данные Правильный ответ Что вывела программа Результат
1
1
2
3
3
9
4
33
5
153
6
873
7
5913
8
46233
9
409113
10
4037913

Понравилась статья? Поделить с друзьями:
  • Как здорово что я тебя нашла
  • Как найти браузер в ноутбуке леново
  • Как найти свой аккаунт в вайбере
  • Я нашла айфон как использовать
  • Как составить хороший текст для видео