0032. 全数字乘积
* * * *
拉格朗日计划
* * * *
全数字乘积

若一个n位数包含了1至n的所有数字恰好一次,我们称它为全数字数。例如,五位数15234是全数字数。

在等式$39\times 186=7254$中,1至9的每个数字都恰好出现了一次,这样的等式称为全数字乘法等式。

找出所有全数字乘法等式,并求出这些等式右侧的数之和。

注意:有些数字可以写成不同的全数字乘法等式的形式,但在求和时只计算一次。

本题难度:



解答

容易看出乘数和被乘数的位数只能是1,4或2,3,相乘后都必须得到四位数,暴力搜索即得结果$45228$。

import itertools

panSet=set([])

for i,j in itertools.chain(itertools.product(range(1,10),range(1000,10000)),itertools.product(range(10,100),range(100,1000))):
    k=i*j
    s=str(i)+str(j)+str(k)
    if len(set(s))==len(s)==9 and "0" not in s and k not in panSet:
        panSet.add(k)

print sum(panSet)