Project Euler Problem 037

Statement

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.

Solution

A simple brute-force solution.

from CommonFunctions import find_primes_less_than
from itertools import islice, count
 
primes = set(find_primes_less_than(1000000))
 
def is_truncable(i):
    if i < 10:
        return False
    tmp = str(i)
    for x in range(len(tmp)):
        if (int(tmp[x:]) not in primes) or (int(tmp[:x + 1]) not in primes):
            return False
    return True
 
if __name__ == '__main__':
    result = sum(islice(filter(is_truncable, primes), 11))
    print("The result is:", result)

The Python file is available for download here.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License