This is just another example of a problem I decided to attempt as a break at work, trying to form the solution before the cookie on the Project Euler site ran out.

Problem

It can be seen that the number, 125874, and its double, 251748, contain exactly the same digits, but in a different order.

Find the smallest positive integer, x, such that 2x, 3x, 4x, 5x, and 6x, contain the same digits.

Python Solution

This could be written in C or Cython to perform much more quickly, and I’m sure there are other optimizations that could be made to this code, but this was written and executed in a total of about three minutes using the Sage Notebook.

import time
 
start = time.time()
 
def numDigits(n):
    r"""
    return a sorted list of digits in a number
    """
    L = []
    while True:
        L.append(n % 10)
        n /= 10
        if n == 0: break
    L.sort()
    return L
 
i = 1
while True:
    a = numDigits(i)
    for j in range(1,7):
        b = numDigits(i * j)
        if a != b: break
        if j == 6:
            print i
            i = 0
    if i == 0: break
    i += 1
 
elapsed = time.time() - start
 
print "result found in %s seconds" % elapsed

When executed, we find the following result.

142857
result found in 1.92401385307 seconds