Find the sum of all Truncatable primes below N in Python

PythonServer Side ProgrammingProgramming

Suppose we have a given integer N; we have to find the sum of all Truncatable primes less than N. As we know the truncatable prime is a number which is left-truncatable prime (if the leading "left" digit is successively removed, then all resulting numbers are treated as prime) as well as right-truncatable prime (if the last "right" digit is successively removed, then all the resulting numbers are treated as prime). An example of truncatable prime is 9137 as this is lefttruncatable prime because 9137, 137, 37 and 7 are primes. Hence 9137 is a truncatable prime.

So, if the input is like N = 55, then the output will be 130 as (2 + 3 + 5 + 7 + 23 + 37 + 53) =

To solve this, we will follow these steps −

  • N := 1000005

  • prime := a list of size N and fill with True

  • Define a function sieve() . This will take

  • prime[1] := False, prime[0] := False

  • for i in range 2 to N, do

    • if prime[i] is same as True, then

      • for j in range i * 2 to N, update in each step by i, do

        • prime[j] := False

  • From the main method, do the following −

  • sum := 0

  • for i in range 2 to n, do

    • current := i

    • f := True

  • while current is non-zero, do

    • if prime[current] is False, then

      • f := False

      • come out from the loop

    • current := current / 10

  • current := i

  • power := 10

  • while quotient of (current / power) is non-zero, do

    • if prime[current mod power] is False, then

      • f := False

      • come out from the loop

    • power := power * 10

  • if f is True, then

    • sum := sum + i

  • return sum

Example

Let us see the following implementation to get better understanding −

 Live Demo

N = 1000005
prime = [True for i in range(N)]
def sieve():
   prime[1] = False
   prime[0] = False
   for i in range(2, N):
      if (prime[i]==True):
         for j in range(i * 2, N, i):
            prime[j] = False
def get_total_of_trunc_primes(n):
   sum = 0
   for i in range(2, n):
   current = i
   f = True
   while (current):
      if (prime[current] == False):
         f = False
         break
      current //= 10
   current = i
   power = 10
   while (current // power):
      if (prime[current % power] == False):
         f = False
         break
      power *= 10
   if f:
      sum += i
   return sum
n = 55
sieve()
print(get_total_of_trunc_primes(n))

Input

55

Output

130
raja
Updated on 27-Aug-2020 12:18:47

Advertisements