Skip to content

Instantly share code, notes, and snippets.

@edalorzo
Created November 25, 2012 17:45
Show Gist options
  • Select an option

  • Save edalorzo/4144517 to your computer and use it in GitHub Desktop.

Select an option

Save edalorzo/4144517 to your computer and use it in GitHub Desktop.
Project Euler-Problem #37
def divides(k,n):
"""
Determines if number n is divisible by n
"""
return n % k == 0
def ldf(n, k):
"""
Obtains the least divisor of n starting from k.
"""
while True:
if divides(k, n):
return k
elif k ** 2 > n:
return n
else:
k += 1
def ld(n):
"""
Obtains the least divisor of n starting from 2.
"""
return ldf(n, 2)
def is_prime(n):
"""
Determines whether a number is prime or not.
"""
if n < 2:
return False
return ld(n) == n
def from_left(prime):
"""
Evaluates if a prime number is truncable from left.
"""
s = str(prime)
for i in range(1,len(s)):
if not is_prime(int(s[i:])):
return False
return True
def from_right(prime):
"""
Evaluates if a prime number is truncable from right.
"""
s = str(prime)
for i in range(-1,-len(s),-1):
if not is_prime(int(s[0:i])):
return False
return True
def next_prime():
"""
Obtains the next truncable prime.
"""
n = 11
while True:
if is_prime(n) and from_left(n) and from_right(n):
yield n
n += 2
def solve():
primes = []
for prime in next_prime():
primes.append(prime)
if len(primes) == 11:
break
return sum(primes)
print "The sum of first 11 truncable primes is: %d " % solve()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment