012 021 102 120 201 210 What is the millionth lexicographic permutation of the digits 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9? """ import euler_utils as utils digits = [chr(i+48) for i in range(0,10)] count = 0 permutation = [] for position in range(9,0,-1): #we could have just divided here, it will straightaway give us the index factorial = utils.factorial_of(position) for i in range(len(digits)): count += factorial if count >= 1000000: count -= factorial permutation.append(digits[i]) digits.remove(digits[i]) break permutation = permutation + digits print ''.join(permutation)
""" Project Euler Problem 34 ======================== 145 is a curious number, as 1! + 4! + 5! = 1 + 24 + 120 = 145. Find the sum of all numbers which are equal to the sum of the factorial of their digits. Note: as 1! = 1 and 2! = 2 are not sums they are not included. """ import euler_utils as utils factorials = [utils.factorial_of(i) for i in range(0,10)] total_sum = 0 for i in range(10,7*utils.factorial_of(9)): if i == sum([factorials[int(d)] for d in str(i)]): total_sum += i print total_sum