Pandigital products
Problem 32
We shall say that an n-digit number is pandigital if it makes use of all the digits 1 to n exactly once; for example, the 5-digit number, 15234, is 1 through 5 pandigital.
The product 7254 is unusual, as the identity, 39 × 186 = 7254, containing multiplicand, multiplier, and product is 1 through 9 pandigital.
Find the sum of all products whose multiplicand/multiplier/product identity can be written as a 1 through 9 pandigital.
HINT: Some products can be obtained in more than one way so be sure to only include it once in your sum.
from tools import is_pandigital
def gen():
for a in range(2, 100):
if a < 10:
start = 1000
else:
start = 100
end = 10000 / a
if a * end == 10000:
end -= 1
for b in range(start, end + 1):
p = a * b
yield a, b, p
def run():
s = set(p for (a, b, p) in gen() if is_pandigital('%d%d%d' % (a, b, p)))
return sum(s)