euler/e037.py

35 lines
1.4 KiB
Python
Raw Normal View History

2010-09-10 15:01:46 +00:00
"""Find the sum of all eleven primes that are both truncatable from left to right and right to left.
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.
"""
from e007 import is_prime, prime_generator
def is_truncatable(prime):
if prime < 10:
return False
rtl = [int(str(prime)[:i]) for i in xrange(len(str(prime))) if i > 0 and i < len(str(prime))]
ltr = [int(str(prime)[i:]) for i in xrange(len(str(prime))) if i > 0 and i < len(str(prime))]
truncated = sorted(rtl + ltr, reverse=True)
for n in truncated:
if not is_prime(n):
return False
print 'OK', prime, rtl, ltr
return True
def main():
truncatable = []
generator = prime_generator()
print 'Searching for truncatable primes...'
while len(truncatable) < 11:
prime = generator.next()
if is_truncatable(prime):
truncatable.append(prime)
print 'Found {0} truncatable primes'.format(len(truncatable))
print 'Sum:', sum(truncatable)
if __name__ == '__main__':
main()