Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 13, 2017 23:47:59

Firely
Зарегистрирован: 2017-04-13
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Задача на сумму факториалов

Помогите решатиь задачу:

Питонтьютор, Занятие 4. Цикл for
Задача «Сумма факториалов» http://pythontutor.ru/lessons/for_loop/problems/sum_of_factorials/

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

———————-

Не могу решить. Предполагаю, что нужно как-то использовать такую таблицу:
1
1х2
1х2х3
1х2х3х4

Т.е. если n = 4, то 1 умножается 4 раза, 2 три раза, и тд. Но как оформить, не знаю.

Офлайн

#2 Апрель 14, 2017 02:33:32

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Задача на сумму факториалов

Заведите две переменные: одну, которая будет накапливать сумму; а другую, которая будет вычислять текущее (в цикле) значение факториала; это текущее значение прибавляйте к первой переменной (увеличивайте ее каждый раз на это значение); цикл закончится, результат будет в первой переменной.
====
Здесь букв больше, чем в коде, если бы я сразу его выписал.

Можно написать решение этой задачи в одну строку (у меня вышло 76 символов с учетом pep8), однако без учета особенностей (факториал 1)

Офлайн

#3 Апрель 14, 2017 03:53:52

Firely
Зарегистрирован: 2017-04-13
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Задача на сумму факториалов

Омг, спасибо, так просто оказалось) в 7 строк.

Офлайн

#4 Апрель 14, 2017 04:01:48

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Задача на сумму факториалов

Вот вариант в одну строку,

 f_sum = lambda n: 1 + sum((reduce(lambda x, y : x * y, range(1, i + 1)) for i in range(2, n +1)))

далее, просто, f_sum(10) и получим 1!+…+ 10!.
Однако работать будет в Python2, для Python3 reduce нужно импортировать из functools


Отредактировано scidam (Апрель 14, 2017 04:04:37)

Офлайн

#5 Апрель 14, 2017 04:07:33

Firely
Зарегистрирован: 2017-04-13
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Задача на сумму факториалов

Спасибо! На будущее пригодится, пока что лямбду и все остальное не знаю…

Офлайн

#6 Апрель 18, 2017 16:56:19

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2763
Репутация: +  185  -
Профиль   Отправить e-mail  

Задача на сумму факториалов

А вот решение этой простенькой задачи на haskell-е. Но это только для того чтобы было с чем сравнивать…

 Prelude> let fsum n = sum [product [1..x] | x <- [1..n]]
Prelude> fsum 10
4037913



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Апрель 18, 2017 16:57:38)

Офлайн

#7 Апрель 19, 2017 01:56:28

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9897
Репутация: +  855  -
Профиль   Отправить e-mail  

Задача на сумму факториалов

Это на Erlang'е

Eshell V5.10.4  (abort with ^G)
1> Fact = fun (X) -> lists:foldl(fun erlang:'*'/2, 1, lists:seq(1, X)) end.
#Fun<erl_eval.6.80484245>
2> FactSummer = fun (N) -> lists:sum(lists:map(Fact, lists:seq(1, N))) end.
#Fun<erl_eval.6.80484245>
3> FactSummer(10).
4037913
4>

А на питоне
  
>>> import math
>>> 
>>> def fact_summer(n):
...      return sum(map(math.factorial, range(1, n + 1)))
... 
>>> fact_summer(10)
4037913
>>>

Лямбду мы не делаем потому, что отладчик потом не видит её имя (так как у неё нет имени).



Отредактировано py.user.next (Апрель 19, 2017 02:08:37)

Офлайн

#8 Апрель 19, 2017 11:10:42

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2763
Репутация: +  185  -
Профиль   Отправить e-mail  

Задача на сумму факториалов

> Это на Erlang'е
Erlang разочаровывает.

> А на питоне
>> Пользоваться математической библиотекой math в этой задаче запрещено.

На haskell-е всё равно короче.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#9 Апрель 19, 2017 11:18:36

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

Задача на сумму факториалов

Rodegast
И ужаснее, если честно. Хотя дело привычки.

Офлайн

#10 Апрель 19, 2017 11:26:06

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2763
Репутация: +  185  -
Профиль   Отправить e-mail  

Задача на сумму факториалов

> И ужаснее, если честно. Хотя дело привычки.

Да ладно. То что я написал полностью аналогично питоновскому варианту от scidam-а.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version