Python Program to Check Prime Number

I’ve been writing Python code for over a decade, and I still remember the first time I had to write a prime number checker.

It seems like a simple math problem, but as your datasets grow, a basic loop can quickly become a bottleneck in your application.

In this tutorial, I’ll show you how to check if a number is prime using several different methods I’ve used in real-world projects.

What is a Prime Number?

Before we dive into the code, let’s quickly refresh our memory on what we are actually looking for.

A prime number is a natural number greater than 1 that has no positive divisors other than 1 and itself.

For example, 2, 3, 5, and 7 are prime, while 4, 6, 8, and 9 are composite numbers because they have other factors.

Method 1: The Simple Trial Division

When I’m teaching a junior developer, I always start with the most intuitive approach: trial division.

We simply loop through all numbers from 2 up to the number itself and see if any of them divide it evenly.

def is_prime_basic(n):
    # Numbers less than 2 are not prime
    if n <= 1:
        return False
    
    # Check for factors from 2 to n-1
    for i in range(2, n):
        if n % i == 0:
            return False
            
    return True

# Example: Checking a US Zip Code (some can be prime!)
zip_code = 90210  # Beverly Hills
if is_prime_basic(zip_code):
    print(f"{zip_code} is a prime number")
else:
    print(f"{zip_code} is not a prime number")

You can refer to the screenshot below to see the output.

isprime python

I’ve found this method works fine for small numbers, but it’s incredibly slow if you’re processing a large list of IDs or financial figures.

If you try to check a number like 1,000,000,000, this loop will run a billion times, which is a waste of CPU cycles.

Method 2: The Optimized Square Root Approach

In my years of performance tuning, I’ve learned that you never need to check beyond the square root of a number.

If a number $n$ has a factor larger than its square root, it must also have a corresponding factor smaller than the square root.

By stopping at the square root, we drastically reduce the number of iterations from $n$ to $\sqrt{n}$.

import math

def is_prime_optimized(n):
    if n <= 1:
        return False
    
    # Check up to the square root of n
    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
            
    return True

# Testing with a larger prime (e.g., a simple key for a hash)
test_val = 104729
print(f"Is {test_val} prime? {is_prime_optimized(test_val)}")

You can refer to the screenshot below to see the output.

prime number or not in python

I always use this version when I’m writing a quick utility script; it’s the perfect balance between simplicity and speed.

Method 3: Skip Even Numbers (The 6k +/- 1 Optimization)

One trick I often use in high-frequency trading apps or heavy math simulations is the “6k +/- 1” rule.

Aside from 2 and 3, all prime numbers can be written in the form $6k \pm 1$. This allows us to skip all even numbers and multiples of 3.

def is_prime_advanced(n):
    if n <= 1: return False
    if n <= 3: return True
    
    # Eliminate multiples of 2 and 3
    if n % 2 == 0 or n % 3 == 0:
        return False
    
    i = 5
    while i * i <= n:
        if n % i == 0 or n % (i + 2) == 0:
            return False
        i += 6
        
    return True

# US Census data example: Checking if a population figure is prime
population_sample = 331449281 # Approx US population in 2020
print(f"Is the population figure prime? {is_prime_advanced(population_sample)}")

You can refer to the screenshot below to see the output.

how to check if number is prime python

I’ve seen this optimization cut execution time by nearly 60% in production environments compared to the standard square root method.

Method 4: Find Primes in a Range (Sieve of Eratosthenes)

If your task is to find all primes up to a certain limit, like generating a list of prime discounts for a marketing campaign, don’t use the previous methods.

The Sieve of Eratosthenes is the gold standard for range-based prime detection.

def sieve_of_eratosthenes(limit):
    primes = [True] * (limit + 1)
    primes[0] = primes[1] = False
    
    for p in range(2, int(limit**0.5) + 1):
        if primes[p]:
            for i in range(p * p, limit + 1, p):
                primes[i] = False
    
    return [num for num, is_p in enumerate(primes) if is_p]

# Example: Get all prime numbers up to 100 for a lottery system
print(f"Primes under 100: {sieve_of_eratosthenes(100)}")

I usually reach for this algorithm when building lookup tables because it is significantly faster than checking each number individually.

I hope you found this tutorial helpful!

Understanding these different methods has saved me countless hours of debugging performance issues over the years.

Whether you’re building a secure login system for a California startup or just solving a coding challenge, picking the right prime check is key.

You may also read:

51 Python Programs

51 PYTHON PROGRAMS PDF FREE

Download a FREE PDF (112 Pages) Containing 51 Useful Python Programs.

pyython developer roadmap

Aspiring to be a Python developer?

Download a FREE PDF on how to become a Python developer.

Let’s be friends

Be the first to know about sales and special discounts.