통계, IT, AI

34. Digit factorials 본문

IT/PROJECT_EULER

34. Digit factorials

Harold_Finch 2017. 3. 2. 22:27

1. 개요

문제는 이곳에서 확인할 수 있다. 어떤 수는 각 자리의 factorial의 합으로 나타낼 수 있다. 예를 들면, \(145\)는 \(1!+4!+5!\)와 같다. 이러한 특징을 갖는 모든 수의 합을 구하는 것이 목표이다.


2. 구현

문제에 조건에 의하여 검사해야 할 숫자에는 상한선이 있다. 즉, \(n\)자리 숫자 중 가장 작은 수인 \(10^{n-1}\)이 \(n\)자리 숫자로 만들 수 있는 가장 큰 값인 \(9!n\)보다 작은 경우만 검사하면 된다.

# -*- coding: utf-8 -*- 
import math as m

n = 1 
fact_9 = m.factorial(9)
while 10**(n-1) < fact_9*n:
	n += 1
	
answer = 0
for i in range(10, fact_9*n):

	if sum(m.factorial(int(j)) for j in str(i)) == i:
		print(i)
		answer += i
print('ANSWER: ', answer)

답은 40730이다.

'IT > PROJECT_EULER' 카테고리의 다른 글

36. Double-base palindromes  (0) 2017.04.09
35. Circular primes  (0) 2017.03.19
33. Digit cancelling fractions  (0) 2017.03.01
32. Pandigital products  (0) 2017.02.26
31. Coin sums  (0) 2017.02.09
Comments