Back

Python Program to Check Prime Number With Examples

10 Jan 2025
7 min read

Prime numbers play a significant role in mathematics, cryptography, and various algorithms. If you are building encryption systems or solving computational problems, checking for prime numbers is a common task. Python Program to Check Prime Number can help you automate this process efficiently. As, It has powerful and flexible features which provides multiple ways to check whether a number is prime or not.

In this article, we will explore how to check prime numbers in Python, including using the isprime function and writing a prime-checking algorithm.

What Are Prime Numbers?

A prime number is a number greater than 1 that cannot be expressed as the product of two smaller positive integers. Simply defined as prime numbers are divisible only by 1 and themselves. The sequence of prime numbers starts with 2, 3, 5, 7, 11, 13, 17, 19, and so on.

Definition of Prime Numbers

Formally, a prime number is a natural number greater than 1 that has no positive divisors other than 1 and itself. The first few prime numbers are:

  • 2 (the only even prime number)
  • 3
  • 5
  • 7
  • 11
  • 13
  • 17

Examples of Prime Numbers

  • 2 is prime as its only divisors are 1 and 2.
  • 3 is prime because it can only be divided by 1 and 3.
  • 5 is prime because it is divisible only by 1 and 5.
  • 11 is prime because it is divisible by 1 and 11.

Importance of Prime Numbers in ProgrammingPrime numbers play a critical role in various fields such as cryptography, hashing algorithms, and primality testing. They are also used in mathematical algorithms to improve the efficiency of computations and enhance data security systems.

Overview of Methods to Check Prime Numbers in Python

Python offers several ways to check if a number is prime. The choice of method depends on the size of the number, the level of optimization required, and the available resources.

Basic Methods

Basic methods involve straightforward approaches using loops and conditions. These methods are easy to understand and implement but are not efficient for large numbers.

Optimized Techniques

Optimized techniques aim to reduce the number of iterations needed to check primality. These methods often involve advanced mathematical concepts such as square root reduction and skipping even numbers.

Advanced Approaches

Advanced approaches include methods like recursion, the math module, and primality tests like the Miller-Rabin test. These approaches are highly efficient, especially for large numbers.

Basic Methods to Check Prime Numbers

Using a Flag Variable

One simple method to check whether a number is prime is by using a flag variable. This approach involves iterating through all numbers up to the given number and checking for divisibility.

Code Example

def is_prime(n):
    if n <= 1:
        return False

    flag = True  # Assume the number is prime initially

    # Check divisibility from 2 to sqrt(n)
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            flag = False  # Set flag to False if divisible
            break  # Exit loop once a divisor is found
    
    return flag  # Return True if no divisors found, False otherwise

# Example usage
num = int(input("Enter a number: "))
if is_prime(num):
    print(f"{num} is a prime number.")
else:
    print(f"{num} is not a prime number.")

Explanation

The program uses a flag variable to assume a number is prime initially. It checks divisibility from 2 to the square root of the number. If a divisor is found, the flag is set to False, indicating the number is not prime. If no divisors are found, the flag remains True, and the number is prime.

Output of the Program

Enter a number: 7 // input
7 is a prime number. // output

Using a For-Else Statement

A more Pythonic way to check for prime numbers is by using the for-else construct. If a number is divisible by any number between 2 and n-1, it will break the loop and return False. If it doesn't find any divisors, the program returns True.

Python Code Implementation

def is_prime(n: int) -> bool:
if n <= 1:
return False # Not a prime number

# Loop to check divisibility from 2 to n-1
for i in range(2, n):
if n % i == 0:
return False # Not a prime number if divisible

return True # Prime number if no divisors found

# Input a number from the user
num = int(input("Enter a number: "))

# Check if the number is prime
if is_prime(num):
print(f"{num} is a prime number.")
else:
print(f"{num} is not a prime number.")

Explanation

The program uses a for loop to check if a number is divisible by any number between 2 and n-1. If a divisor is found, the number is not prime, and the function returns 0. If no divisors are found, it returns 1, indicating the number is prime.

Example Ouptut

Enter a number: 7 // input
7 is a prime number. // output

Optimized Methods to Check Prime Numbers

Optimization by Reducing Iterations to number/2 or √n

One of the most effective optimizations is reducing the range of iterations to sqrt(n). Since any factor of n greater than its square root must have a corresponding factor smaller than the square root, we can limit our checks.

Explanation of the Approach

  • To check if a number √n is prime, we attempt to divide it by each integer starting from 2 up to √n. If √n is divisible by any of these integers, it is not a prime.
  • If √n is divisible by some number larger than √n​, the corresponding smaller factor would have already been found. Hence, checking divisibility only up to √n is enough to verify primality.
  • This optimization reduces the number of divisions performed, making the algorithm much faster, especially for large numbers.

Python Code Implementation

import math

def is_prime(n):
    # Edge cases for numbers less than 2
    if n <= 1:
        return False
    # Check divisibility up to sqrt(n)
    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True

# Example of usage
number = 29
if is_prime(number):
    print(f"{number} is a prime number.")
else:
    print(f"{number} is not a prime number.")

Example Output

29 is a prime number.

Skipping Even Iterations for Efficiency

In addition to reducing the range of iterations by checking up to √n, another optimization to improve primality testing is skipping even numbers after checking for divisibility by 2. Since any even number greater than 2 is not prime (as it is divisible by 2), we can avoid unnecessary checks for even numbers, thus further improving efficiency.

Explanation of the Approach

  • Before entering the loop, we first check if the number nn is divisible by 2. If it is, and n>2n>2, we immediately return False, since any even number greater than 2 is not prime.
  • After checking divisibility by 2, we can skip all even numbers in the iteration process, starting from 3. We can increment the loop variable by 2, ensuring that only odd numbers are tested for divisibility.
  • By skipping even numbers, we reduce the number of iterations in half, making the primality test faster, especially for large numbers.

Python Code Implementation

import math

def is_prime(n):
    # Edge cases for numbers less than 2
    if n <= 1:
        return False
    # Check divisibility by 2 first
    if n == 2:
        return True
    if n % 2 == 0:
        return False
    # Check divisibility from 3 to sqrt(n), skipping even numbers
    for i in range(3, int(math.sqrt(n)) + 1, 2):
        if n % i == 0:
            return False
    return True

# Example of usage
number = 29
if is_prime(number):
    print(f"{number} is a prime number.")
else:
    print(f"{number} is not a prime number.")

Example Output

29 is a prime number.

Advanced Methods for Checking Prime Numbers

For more advanced or alternative approaches to primality testing, recursion provides a useful technique. Recursive methods can sometimes simplify the logic of primality tests by breaking the problem down into smaller, manageable parts.

Using Recursion

Recursion can be employed to check whether a number is prime by repeatedly dividing the number and checking its divisibility with smaller integers. Instead of using loops, the function calls itself to test divisibility, making the code more elegant in certain cases.

Python Code Implementation

import math

def is_prime_recursive(n, divisor=2):
    # Base cases
    if n <= 1:
        return False
    if divisor > math.sqrt(n):
        return True
    # Check divisibility by the current divisor
    if n % divisor == 0:
        return False
    # Recursive call with next divisor
    return is_prime_recursive(n, divisor + 1)

# Example of usage
number = 29
if is_prime_recursive(number):
    print(f"{number} is a prime number.")
else:
    print(f"{number} is not a prime number.")

Example Output

29 is a prime number.

Explanation 

The is_prime function checks if a number n is prime by first handling numbers less than or equal to 1. It then checks divisibility from 2 up to the square root of n. If no divisors are found, it returns True, indicating n is prime; otherwise, it returns False.

Using the math Module

The math module in Python provides mathematical functions that can simplify prime number checking. One key function is math.sqrt(), which calculates the square root of a number, making it particularly useful for optimizing primality tests.

Explanation of the sqrt Function

The math.sqrt(n) function returns the square root of a given number √n. In the context of checking for prime numbers, we use this function to limit our divisibility checks up to √n, since any divisor greater than nn​ would have a corresponding smaller divisor already detected below √n. This optimization significantly reduces the number of iterations required in primality testing.

Python Code Implementation

import math

def is_prime(n):
    if n <= 1:
        return False
    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True

# Example usage
number = 29
if is_prime(number):
    print(f"{number} is prime.")
else:
    print(f"{number} is not prime.")

Example Output

29 is prime.

Explanation

The code defines a function is_prime that checks if a number n is prime. It first returns False for numbers less than or equal to 1, as they are not prime. Then, it checks divisibility by numbers from 2 up to the square root of n. If a divisor is found, it returns False, indicating that n is not prime. If no divisors are found, the function returns True, meaning n is prime. In the example, the function checks if 29 is prime and prints the result "29 is prime."

Using the sympy.isprime function in python

The isprime function in python is used to check whether the number is prime or not. A sympy library is used which provides a straightforward function known as sympy.isprime(). This is a powerful tool, especially for large numbers, as it is optimized and handles a variety of edge cases and special number types.

Introduction to the sympy Library

SymPy is a Python library for symbolic mathematics. It includes methods for arithmetic, algebra, calculus, and number theory, among other things. The isprime() function is part of the library and is an efficient way to determine if a number is prime. The function is highly optimized for large integers, which makes it an excellent choice for those needing high-performance primality testing.

To use sympy, you'll need to install it via pip:

pip install sympy

Python Code Implementation

import sympy

def check_prime(n):
    # Use the sympy isprime() function to check primality
    if sympy.isprime(n):
        return f"{n} is a prime number."
    else:
        return f"{n} is not a prime number."

# Example usage
num = int(input("Enter a number: "))
print(check_prime(num))

Example Output

Enter a number: 17
17 is a prime number.

Explanation 

  • The sympy library is imported to access the isprime() function.
  • This function calls sympy.isprime(n) to check if the number is prime and returns the corresponding message.
  • The user is asked to enter a number, and the check_prime() function is used to determine if the number is prime.

Using the Miller-Rabin Primality Test

The Miller-Rabin test is a probabilistic algorithm used for primality testing. While it can sometimes give a false positive (i.e., an incorrect determination of primality), it is highly efficient and accurate for large numbers when run multiple times.

Overview of the Algorithm

The Miller-Rabin primality test works by testing whether a number n behaves like a prime in a mathematical sense, based on certain conditions derived from modular arithmetic. It performs checks using different random bases to reduce the likelihood of false positives. The more times it is repeated with different bases, the more confident we can be in the result.

Python Code Implementation

import random

def miller_rabin(n, k=5):
    # Edge cases for numbers less than 2
    if n <= 1:
        return False
    if n == 2 or n == 3:
        return True
    
    # Write n-1 as 2^r * d
    r, d = 0, n - 1
    while d % 2 == 0:
        r += 1
        d //= 2
    
    # Perform k rounds of testing
    for _ in range(k):
        a = random.randint(2, n - 2)
        x = pow(a, d, n)
        if x == 1 or x == n - 1:
            continue
        for _ in range(r - 1):
            x = pow(x, 2, n)
            if x == n - 1:
                break
        else:
            return False
    return True

# Example usage
number = 29
if miller_rabin(number):
    print(f"{number} is prime.")
else:
    print(f"{number} is not prime.")

Example Output

29 is prime.

Generating Prime Numbers in Python

Generating prime numbers efficiently is another common task in number theory and cryptography. Python provides various methods to generate primes, either in a specific range or up to the first n primes.

Generate Prime Numbers in a Range

To generate prime numbers in a range, we can use a simple loop or even a generator function.

Python Code Implementation

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

def generate_primes_in_range(start, end):
    primes = []
    for num in range(start, end + 1):
        if is_prime(num):
            primes.append(num)
    return primes

# Example usage
start = 10
end = 50
primes_in_range = generate_primes_in_range(start, end)
print(f"Prime numbers between {start} and {end}: {primes_in_range}")

Example Output

Prime numbers between 10 and 50: [11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]

Python Code Using a Generator Function

A generator function can be used to yield prime numbers one by one in a range, making it more memory efficient for large ranges.

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

def generate_primes_in_range(start, end):
    for num in range(start, end + 1):
        if is_prime(num):
            yield num

# Example usage
start = 10
end = 50
primes_gen = generate_primes_in_range(start, end)

print("Prime numbers between 10 and 50:")
for prime in primes_gen:
    print(prime, end=" ")

Example Output

Prime numbers between 10 and 50:
11 13 17 19 23 29 31 37 41 43 47 

Generate the First n Prime Numbers

A typical approach is to find all prime numbers within a given range using loops or generators.

Python Code Implementation

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

def generate_first_n_primes(n):
    primes = []
    num = 2
    while len(primes) < n:
        if is_prime(num):
            primes.append(num)
        num += 1
    return primes

# Example usage
n = 10
first_n_primes = generate_first_n_primes(n)
print(f"The first {n} prime numbers are: {first_n_primes}")

Example Output

The initial 10 prime numbers are: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29].

Applications of Prime Numbers

Prime numbers have several important applications in various fields of mathematics, cryptography, computer science, and number theory. Here are some of their major uses:

  • Cryptography: Prime numbers play a crucial role in public-key encryption algorithms like RSA. The difficulty of factoring large numbers into primes is the basis of modern encryption systems.
  • Random Number Generation: Some random number generators use prime numbers to create sequences that are difficult to predict.
  • Hash Functions: Primes are used in creating efficient hash functions for data storage and retrieval, improving the performance of search algorithms.
  • Computer Security: In addition to encryption, prime numbers are used for key generation, digital signatures, and other security protocols.
  • Mathematical Research: Prime numbers are at the core of many mathematical theorems and conjectures, and they are often studied for their intrinsic properties and patterns.

Performance Analysis of Different Methods

When testing whether a number is prime, there are various methods with varying performance characteristics. These methods differ in their time complexity, efficiency, and use cases.

Comparing Time Complexity of Methods

Each method of primality testing can be analyzed in terms of its time complexity, which is critical for understanding how it scales with large numbers.

Basic Methods

1.  Basic Methods

Method Time Complexity Description
1. Trial Division O(√n) Checks all numbers from 2 to n-1 to see if any divide n evenly. Simple but inefficient for large numbers.
2. Trial Division up to √n O(√n) Optimizes by checking divisibility only up to √n, reducing the number of checks significantly.

2. Optimized Techniques

Method Time Complexity Description
3. Skipping Even Numbers O(√n / 2) Skips even numbers after checking divisibility by 2, halving the number of checks by only checking odd numbers from 3 onward.
4. Sieve of Eratosthenes O(n log(log n)) A faster method to generate a list of primes up to a given limit. Much quicker than trial division for bulk prime generation.

3. Advanced Algorithms

Method Time Complexity Description
5. Miller-Rabin Primality Test O(k log3 n) for k iterations A probabilistic algorithm that checks if a number is prime with high confidence, but may give false positives (can reduce by increasing iterations).
6. AKS Primality Test O(n7.5) A deterministic algorithm that runs in polynomial time. While theoretically optimal for large numbers, it is rarely used due to high complexity.

Pros and Cons of Each Approach

Method Pros Cons When to Use
1. Trial Division Simple, easy to implement Very slow for large numbers Use for small numbers or when simplicity is more important than performance.
2. Trial Division up to √n More efficient than basic trial division, easy to implement Still inefficient for large numbers Use for numbers up to moderate size where performance is important but not crucial.
3. Skipping Even Numbers Further optimizes trial division by reducing the number of checks Still not efficient enough for large-scale applications Use when working with moderately large numbers, especially when implementing your own primality test.
4. Sieve of Eratosthenes Extremely fast for generating a list of primes up to a limit Requires memory proportional to the range being checked, inefficient for very large ranges Use when you need a list of primes up to a large number, such as for cryptographic algorithms or other applications that require many primes.
5. Miller-Rabin Primality Test Very fast, especially for large numbers, probabilistic approach gives quick results Can give false positives, though the likelihood is very low with enough iterations Use for very large numbers where speed is critical, and a small risk of error is acceptable.
6. AKS Primality Test Deterministic and optimal for large numbers, polynomial time complexity Very slow in practice due to its high complexity, rarely used in real-world applications Use when an exact and deterministic primality test is needed, and performance is less important than absolute accuracy.

Conclusion

In conclusion, Prime numbers are essential in many fields of mathematics and computer science. Understanding how to efficiently check for prime numbers in Python is crucial for optimizing algorithms, especially in areas like cryptography. By using methods like square root optimization, recursion, and libraries like sympy, you can ensure that your program efficiently handles primality testing.

Frequently Asked Questions

1. How to check if a number is prime in Python? 

You can use the built-in isprime() function from the sympy library, or implement your methods using loops and optimizations like checking divisibility up to sqrt(n).

2. What is the isprime function in python ?

The isprime function in python is available in the sympy library and efficiently checks if a number is prime.

3. How do I check if a number is prime using Python code?

Use simple methods like checking divisibility up to n-1 or optimized techniques like the square root method.

4. What is the most efficient way to check if a number is prime in Python?

The most efficient way is to use optimizations like reducing iterations to the square root of the number and skipping even numbers. For large numbers, you can use probabilistic tests like the Miller-Rabin test.

5. How do I check for prime numbers in Python using recursion?

You can implement a recursive function to check if a number is prime by dividing it by integers starting from 2. If no divisor is found, the number is prime.

Read More Articles

Chat with us
Chat with us
Talk to career expert