Project Euler 38

Project Euler 38

题目

Pandigital multiples

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

\(\begin{aligned} 192 \times 1 = 192\\ 192 \times 2 = 384\\ 192 \times 3 = 576\\ \end{aligned}\)

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, \dots ,n)\) where \(n > 1\)?

解决方案

如果需要\(n>1\),那么当任意一个数\(n\),将\(n\)\(2n\)拼接起来,长度会翻倍(很容易超过\(9\)),可以使用这个方法进行剪枝。

代码

1
2
3
4
5
6
7
8
9
10
11
12
b = "123456789"
ans = 0
for i in range(1, int(10**(len(b)/2))+4):
t = ""
for x in range(1, 10):
t += str(i * x)
if len(t) >= 9:
break
u = "".join((lambda x: (x.sort(), x)[1])(list(t)))
if u == b:
ans = max(ans, int(t))
print(ans)
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
Ujimatsu Chiya 微信 微信
Ujimatsu Chiya 支付宝 支付宝