57 lines
1.5 KiB
Python
57 lines
1.5 KiB
Python
#!/usr/bin/env python
|
|
"""
|
|
Created on 04 Dic 2021
|
|
|
|
@author: David Doblas Jiménez
|
|
@email: daviddoji@pm.me
|
|
|
|
Solution for problem 060 of Project Euler
|
|
https://projecteuler.net/problem=60
|
|
"""
|
|
|
|
from utils import is_prime, list_primes, timeit
|
|
|
|
|
|
def solve_backtrack(max_chain_length, chain):
|
|
primes_list = list_primes(10_000)
|
|
|
|
for p in primes_list[1:]:
|
|
if p not in chain and is_concatenable(chain, p):
|
|
chain.append(p)
|
|
if len(chain) == max_chain_length:
|
|
return chain
|
|
solve_backtrack(max_chain_length, chain)
|
|
chain.pop()
|
|
return chain
|
|
|
|
|
|
def is_concatenable(chain, candidate):
|
|
for n in chain:
|
|
if not is_prime(int(str(n) + str(candidate))):
|
|
return False
|
|
if not is_prime(int(str(candidate) + str(n))):
|
|
return False
|
|
return True
|
|
|
|
|
|
@timeit("Problem 060")
|
|
def compute():
|
|
"""
|
|
The primes 3, 7, 109, and 673, are quite remarkable. By taking any two
|
|
primes and concatenating them in any order the result will always be prime.
|
|
For example, taking 7 and 109, both 7109 and 1097 are prime. The sum of
|
|
these four primes, 792, represents the lowest sum for a set of four primes
|
|
with this property.
|
|
|
|
Find the lowest sum for a set of five primes for which any two primes
|
|
concatenate to produce another prime.
|
|
"""
|
|
|
|
ans = solve_backtrack(5, [])
|
|
|
|
return sum(ans)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
print(f"Result for Problem 060: {compute()}")
|