# Python Program to Print all Prime Numbers in an Interval

Printing all prime numbers in an interval is a common problem in mathematics. It involves finding all prime numbers within a specific range of numbers. The objective of the article is to identify and print all prime numbers within this interval. In Python, there are several approaches to solving this problem, which involve using different algorithms and techniques.

Prime numbers can only be divided by 1 and themselves. Python has different techniques to find them in a given interval, such as trial division of numbers between the interval or by using the Sieve of Eratosthenes algorithm.

`Number => 5 => Divided by => 1 and 5 => Prime NumberNumber => 6 => Divided by => 1,2,3 and 6 => Not a Prime Number`

## Print all Prime Numbers in an Interval

Python provides different techniques to find prime numbers in a given interval, and these techniques are explained in detail below. Wiki Link to understand the list of prime numbers

### Using trial division

#### Checking if a number is prime

We need to follow the below steps to check if the number is prime or not

Step 1: If the given number is less than or equal to 1, it is not a prime number.

Step 2: Next, If the number is 2, it is a prime number.

Step 3: Next, If the number is even (i.e., divisible by 2), it is not a prime number.

Step 4: As a final step, Check if the number is divisible by any odd number from 3 to the square root of the number. Then it is not a prime number. else, it is a prime number.

Using the above steps, We have created a function to calculate the prime number

``````def is_prime(n):
if n <= 1:
return False
elif n == 2:
return True
elif n % 2 == 0:
return False
else:
for i in range(3, int(n**0.5) + 1, 2):
if n % i == 0:
return False
return True
``````

If we provide the number as an input to this function, It will give you either true = Prime number or false = Not a prime number

Example:

```print(is_prime(4)) => Output: False
print(is_prime(997)) => Output: True```

With the above function, Now we can able to find if a given input number is a prime number or not. To move forward, We need to find all the prime numbers within a range of values. For that, We again create a custom function “`print_primes_in_interval`” to get the start and end range as input and provide all the prime numbers as output.

```def ```print_primes_in_interval(start, end):
primes = []
for num in range(start, end+1):
if is_prime(num):
primes.append(num)
print("Prime numbers in the interval [{}, {}] are:".format(start, end))
print(primes)
``````

In the above code, We have declared an empty list to store all the prime numbers. Then we use the range function to iterate through each number in the interval and check if it is prime using the `is_prime` function. If it is, we append it to the `primes` list. At last, we print the list of prime numbers.

#### Example

To get the list of all prime numbers between 10 and 50. We can call the `print_primes_in_interval` function with the parameters `start=10` and `end=50` as shown below

``````print_primes_in_interval(10, 50)
``````

Output:

``````Prime numbers in the interval [10, 50] are:
[11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
``````

With the input values 10 and 50, We have found the prime numbers between them `[11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]`

### Using the Sieve of Eratosthenes method

The Sieve of Eratosthenes is an algorithm for finding all the prime numbers up to a given limit. It works by iteratively marking as composite (i.e., not prime) the multiples of each prime, starting with the multiples of 2.

For example to find all prime numbers within a given interval using the Sieve of Eratosthenes

``````def print_primes_in_interval(start, end):
# create a list of all numbers from start to end
nums = [True] * (end + 1)
nums = nums = False

# iterate through the list and mark all non-prime numbers
for i in range(2, int(end**0.5) + 1):
if nums[i]:
for j in range(i**2, end + 1, i):
nums[j] = False

# print all prime numbers in the interval
primes = [i for i in range(start, end + 1) if nums[i]]
print("Prime numbers in the interval [{}, {}] are:".format(start, end))
print(primes)```
```
```print_primes_in_interval(10, 50)```

In the above code, we first create a list called `nums` of length `end + 1`, where each element is initially set to `True`. We then mark all non-prime numbers in the list using the Sieve of Eratosthenes algorithm. At last, we create a list called `primes` containing all the prime numbers in the interval, and print it.

Output:

`Prime numbers in the interval [10, 50] are:[11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]45`

### Using the sympy library

Sympy is a Python library for symbolic mathematics. It provides a number of functions for working with prime numbers. Here’s how to use the sympy library to find all prime numbers within a given interval:

```def print_primes_in_interval(start, end):
primes = [i for i in range(start, end + 1) if isprime(i)]
print("Prime numbers in the interval [{}, {}] are:".format(start, end))
print(primes)

print_primes_in_interval(10, 50)```

In the above code, we use the `isprime` function from the sympy library to check if each number in the interval is prime. We then create a list called `primes` containing all the prime numbers in the interval and print it.

Output:

```Prime numbers in the interval [10, 50] are:
[11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]```

## Performance Testing

Based on theory, the Sieve of Eratosthenes algorithm generally has better performance than both the trial division method and SymPy’s prime number functions.

Let’s do a quick performance testing on the above three methods. I am using “datetime.datetime.now()” to get the start time and calculating again after code execution is completed and the difference will give you the total time spent on processing the code 🙂

### Using the sympy library

```start_time = datetime.datetime.now()
print_primes_in_interval(10, 9999999)
end_time = datetime.datetime.now()

print(end_time - start_time)```

The total time consumed to find all the prime numbers between 10, and 9999999 is approximately 11 seconds

`0:00:11.694692`

### Using the Sieve of Eratosthenes method

```start_time = datetime.datetime.now()
print_primes_in_interval(10, 9999999)
end_time = datetime.datetime.now()

print(end_time - start_time)```

The total time consumed to find all the prime numbers between 10, and 9999999 is approximately 1.8 seconds

`0:00:01.881594`

### Using trial division

```start_time = datetime.datetime.now()
print_primes_in_interval(10, 9999999)
end_time = datetime.datetime.now()

print(end_time - start_time)```

The total time consumed to find all the prime numbers between 10, and 9999999 is approximately 45 seconds

`0:00:45.891543`

So the theory is actually true, Sieve of Eratosthenes algorithm is better in performance comparing the other 2 methods. Awesome find 🙂

## Conclusion

In this article, we’ve looked at three different approaches to finding all prime numbers within a given interval in Python. One is using the Sieve of Eratosthenes algorithm and the second method uses sympy library and the last and final method is by using division to find the prime number. We also did a quick performance test by giving a large range of numbers 10 -> 9999999 and found the Sieve of Eratosthenes algorithm outperformed the other 2 methods. So the choice of methods is based on the use case and the performance 🙂

Good Luck with your Learning !!

Related Topics:

How do you code a Hangman Game in Python?

How to Convert JSON to YAML

Python program to iterate through two lists in parallel

How custom classes are created in Python?