Проект Эйлера

Проект Эйлера. Задача 34 «Факториалы цифр»

Условие:

145 является любопытным числом, поскольку 1! + 4! + 5! = 1 + 24 + 120 = 145.

Найдите сумму всех чисел, каждое из которых равно сумме факториалов своих цифр.

Примечание: поскольку 1! = 1 и 2! = 2 не являются суммами, учитывать их не следует.

Решение:

import math, sys

if sys.version_info.major == 2:
   range = xrange

def compute():
    # 1=1! и 2= 2! исключаем. Если число имеет n >=8 цифр, то даже если цифр 9, n * 9! все равно меньше, чем число (которое как минимум 10^n). 
    ans = sum(i for i in range(3, 10000000) if i == factorial_digit_sum(i))
    return str(ans)


def factorial_digit_sum(n):
   result = 0
   while n >= 10000:
      result += FACTORIAL_DIGITS_SUM_WITH_LEADING_ZEROS[n % 10000]
      n //= 10000
   return result + FACTORIAL_DIGITS_SUM_WITHOUT_LEADING_ZEROS[n]

FACTORIAL_DIGITS_SUM_WITHOUT_LEADING_ZEROS = [sum(math.factorial(int(c)) for c in str(i)) for i in range(10000)]
FACTORIAL_DIGITS_SUM_WITH_LEADING_ZEROS = [sum(math.factorial(int(c)) for c in str(i).zfill(4)) for i in range(10000)]

if __name__ == "__main__":
    print(compute())

Ruslan

Recent Posts

10 удалённых Python-вакансий

Если вы ищете работу на Python, на Talanto.work сейчас есть варианты для junior, middle, senior…

6 месяцев ago

Где искать Python-вакансии в 2026 году: зачем на Talanto.work появился отдельный сценарий поиска

Рынок Python-вакансий большой, но удобным его назвать сложно. Формально вакансий много, однако в реальном поиске…

6 месяцев ago

Срезы в Python со всеми подробностями

Срезы в Python — это больше, чем a[2:7]. В статье — быстрый разбор полезных приёмов:…

8 месяцев ago

Возведение в степень в Python: полное руководство

В этой статье мы рассмотрим возведение в степень в Python с помощью различных методов, от…

9 месяцев ago

Как удалить дубликаты из списка Python?

Дубликаты в списке Python — частая проблема. В статье показано, как быстро убрать повторы, в…

9 месяцев ago

Виртуальный (shared) хостинг от SpaceWeb: технический обзор

Услуга виртуального хостинга на SpaceWeb позволяет арендовать часть сервера (shared-сервера) и разместить на нём свой…

11 месяцев ago