Условие:
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())