#http://radiusofcircle.blogspot.com #time module for calculating the execution time import time #time at the start of program execution start = time.time() #Sieve of Erotosthenes #One of the best algorithm to generate prime numbers #https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes def sieve(n): is_prime = [True]*n is_prime[0] = False is_prime[1] = False is_prime[2] = True #even numbers except 2 have been eliminated for i in xrange(3,int(n**0.5+1),2): index = i*2 while index < n: is_prime[index] = False index = index+i prime = [2] for i in xrange(3,n,2): if is_prime[i]: prime.append(i) return prime #prime numbers less than 1 million primes = sieve(1000000) #solution set to store values solution = [] #for loop, to loop through primes for prime in primes: flag = True number = prime mul = 10**(len(str(number))-1) number = (number-(number/mul)*mul)/10 #checks if number has any digits with #multiples of 2 or 5 while number: if (number%10) % 2 == 0 or (number%10) %5 == 0: flag = False break number = number/10 #check for right truncatability if flag: number = prime/10 solution.append(prime) while number: if number not in primes: solution.remove(prime) break number //= 10 #copy of solution set, removed - 2,3,5,7 sol = solution[4:] #for loop to check for left truncatability for i in sol: number = i while number: mul = 10**(len(str(number))-1) number = number - (number/mul)*mul if number not in primes and number != 0: solution.remove(i) break #printing the sum of solution print sum(solution) #time at the end of program execution end = time.time() #printing the execution time print end - start