from math import factorial as fact
from timeit import default_timer as timer
start = timer()
def findFactorialSum():
factorials = [fact(x) for x in range(0, 10)] # pre-calculate products
total_sum = 0
for k in range(10, fact(9) * 7): # 9999999 is way more than its fact-sum
tmp = k
total = 0
while tmp > 0:
total += factorials[tmp % 10]
tmp //= 10
if total == k:
total_sum += k
return total_sum
ans = findFactorialSum()
elapsed_time = (timer() - start) * 1000 # s --> ms
print "Found %d in %r ms." % (ans, elapsed_time)
ZnJvbSBtYXRoIGltcG9ydCBmYWN0b3JpYWwgYXMgZmFjdApmcm9tIHRpbWVpdCBpbXBvcnQgZGVmYXVsdF90aW1lciBhcyB0aW1lcgoKc3RhcnQgPSB0aW1lcigpCgpkZWYgZmluZEZhY3RvcmlhbFN1bSgpOgogICAgZmFjdG9yaWFscyA9IFtmYWN0KHgpIGZvciB4IGluIHJhbmdlKDAsIDEwKV0gIyBwcmUtY2FsY3VsYXRlIHByb2R1Y3RzCiAgICB0b3RhbF9zdW0gPSAwCiAgICBmb3IgayBpbiByYW5nZSgxMCwgZmFjdCg5KSAqIDcpOiAjIDk5OTk5OTkgaXMgd2F5IG1vcmUgdGhhbiBpdHMgZmFjdC1zdW0KICAgICAgICB0bXAgPSBrCiAgICAgICAgdG90YWwgPSAwCiAgICAgICAgd2hpbGUgdG1wID4gMDoKICAgICAgICAgICAgdG90YWwgKz0gZmFjdG9yaWFsc1t0bXAgJSAxMF0KICAgICAgICAgICAgdG1wIC8vPSAxMAoKICAgICAgICBpZiB0b3RhbCA9PSBrOgogICAgICAgICAgICB0b3RhbF9zdW0gKz0gawoKICAgIHJldHVybiB0b3RhbF9zdW0KCmFucyA9IGZpbmRGYWN0b3JpYWxTdW0oKQplbGFwc2VkX3RpbWUgPSAodGltZXIoKSAtIHN0YXJ0KSAqIDEwMDAgIyBzIC0tPiBtcwoKcHJpbnQgIkZvdW5kICVkIGluICVyIG1zLiIgJSAoYW5zLCBlbGFwc2VkX3RpbWUpCg==