Pandigital multiples

Take the number 192 and multiply it by each of 1, 2, and 3:

192 × 1 = 192
192 × 2 = 384
192 × 3 = 576

By concatenating each product we get the 1 to 9 pandigital, 192384576. We will call 192384576 the concatenated product of 192 and (1,2,3)

The same can be achieved by starting with 9 and multiplying by 1, 2, 3, 4, and 5, giving the pandigital, 918273645, which is the concatenated product of 9 and (1,2,3,4,5).

What is the largest 1 to 9 pandigital 9-digit number that can be formed as the concatenated product of an integer with (1,2, ... , n) where n > 1?


Idea

From above example:

  • 192384576 is generated by $ 192 * (1 * 10^6 + 2 * 10^3 + 3 * 10^0) $
  • 918273645 is generated by $ 9 * (1*10^8 + 2*10^6 + 3*10^4 + 4*10^2 + 5*10^0) $

Now we can see 918273645 is currently the largest pandigital number, so we can start from 918273645, to check if any pandigital muplitple is greater than this one.

Also, the first digit of the integer must be 9 if this integer will be greater than 918273645. So start from $ 9x_1, 9x_1x_2, 9x_1x_2x_3, ... $
And, $ 9x_1...x_i $ takes $ i+1 $ digits, $ k * 9x_1....x_i, k \in [2,3, ..., 9] $ takes $ i+2 $ digits. So if want to take exactly 9 digits, $i$ could only be 0 or 3.
$i=0$ is in example, so we only need to check $i=3$.


In [1]:
def is_pandigital(n):
    return not '0' in str(n) and len(str(n)) == len(set(str(n)))
In [2]:
def solve():
    largest = (918273645, (9, 5))
    for n in filter(is_pandigital, range(9001, int(1e4))):
        if is_pandigital(n * 100002):
            largest = max(largest, (n * 100002, 2))
    return largest
In [3]:
solve()
Out[3]:
(932718654, 2)