I just solved Project Euler 38 and was wondering if you guys could provide some suggestions on how to speed it up. I've tried adding extra conditions but they increase the time. Any ideas on how to optimize the numbers I'm checking would be appreciated.
from timeit import default_timer as timer
def create_pandigital_multiple(original_number):
num = str(original_number)
digits = range(1, 10)
if len(num) >= 5:
return 0
else:
temp = 2
while len(num) < 9:
num += str(original_number * temp)
temp += 1
if sorted([int(x) for x in num]) == digits:
return int(num)
else:
return 0
start = timer()
ans = 0
for k in range(9, 10**5):
if create_pandigital_multiple(k) > greatest:
ans = create_pandigital_multiple(k)
elapsed_time = (timer() - start) * 1000 # s --> ms
print "Found %d in %r ms." % (ans, elapsed_time)