60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
#!/usr/bin/env python3
|
||
|
||
# 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?
|
||
|
||
from projecteuler import is_pandigital, timing
|
||
|
||
|
||
@timing
|
||
def p038() -> None:
|
||
_max = 0
|
||
|
||
# A brute force approach is used, starting with 1 and multiplying
|
||
# the number by 1, 2 etc., concatenating the results, checking if
|
||
# it's 1 to 9 pandigital, and going to the next number when the
|
||
# concatenated result is greater than the greatest 9 digit pandigital
|
||
# value. The limit is set to 10000, since 1*10000=10000, 2*10000=20000 and
|
||
# concatenating this two numbers a 10-digit number is obtained.
|
||
for i in range(1, 10000):
|
||
n = 0
|
||
j = 1
|
||
|
||
while True:
|
||
tmp = i * j
|
||
n = n + tmp
|
||
j = j + 1
|
||
|
||
if n > _max and is_pandigital(n, 9):
|
||
_max = n
|
||
if i * j < 10:
|
||
n = n * 10
|
||
elif i * j < 100:
|
||
n = n * 100
|
||
elif i * j < 1000:
|
||
n = n * 1000
|
||
elif i * j < 10000:
|
||
n = n * 10000
|
||
elif i * j < 100000:
|
||
n = n * 100000
|
||
|
||
if n > 987654321:
|
||
break
|
||
|
||
print('Project Euler, Problem 38')
|
||
print(f'Answer: {_max}')
|
||
|
||
|
||
if __name__ == '__main__':
|
||
p038()
|