Solution to problem 37

This commit is contained in:
David Doblas Jiménez 2021-09-05 16:59:28 +02:00
parent 44ee008454
commit c4a8283576

57
src/Python/Problem037.py Normal file
View File

@ -0,0 +1,57 @@
#!/usr/bin/env python3
"""
Created on 09 Apr 2021
@author: David Doblas Jiménez
@email: daviddoji@pm.me
Solution for problem 37 of Project Euler
https://projecteuler.net/problem=37
"""
from itertools import product
from utils import timeit, is_prime
@timeit("Problem 37")
def compute():
"""
The number 3797 has an interesting property. Being prime itself, it is
possible to continuously remove digits from left to right, and remain
prime at each stage: 3797, 797, 97, and 7.
Similarly we can work from right to left: 3797, 379, 37, and 3.
Find the sum of the only eleven primes that are both truncatable from left
to right and right to left.
NOTE: 2, 3, 5, and 7 are not considered to be truncatable primes.
"""
primes, ans = [], 0
for i in range(2,7):
candidates = product([1,2,3,5,7,9], repeat=i)
for t in candidates:
primes.append(''.join([str(d) for d in t]))
for p in primes:
trunc = True
if not is_prime(int(p)):
trunc = False
continue
for i in range(1, len(p)):
if not is_prime(int(p[i:])):
trunc = False
break
if not is_prime(int(p[:i])):
trunc = False
break
if trunc:
ans += int(p)
return ans
if __name__ == "__main__":
print(f"Result for Problem 37: {compute()}")