Check if given number is Emirp Number or not in Python

An Emirp number is a prime number that becomes a different prime when its digits are reversed. The term "Emirp" is "prime" spelled backwards. For a number to be Emirp, it must be prime, and its reverse must also be prime (and different from the original).

For example, 97 is an Emirp number because 97 is prime, and its reverse 79 is also prime.

Algorithm

To check if a number is Emirp, we follow these steps ?

  • Check if the number is prime
  • If not prime, return False
  • Calculate the reverse of the number
  • Check if the reversed number is also prime
  • Return True if both conditions are met

Implementation

Here's the complete implementation to check for Emirp numbers ?

def is_prime(num):
    if num <= 1:
        return False
    if num == 2:
        return True
    if num % 2 == 0:
        return False
    
    # Check odd divisors up to sqrt(num)
    for i in range(3, int(num**0.5) + 1, 2):
        if num % i == 0:
            return False
    return True

def reverse_number(num):
    reverse_num = 0
    while num != 0:
        digit = num % 10
        reverse_num = reverse_num * 10 + digit
        num = num // 10
    return reverse_num

def is_emirp(num):
    # Check if number is prime
    if not is_prime(num):
        return False
    
    # Get reversed number
    reversed_num = reverse_number(num)
    
    # Check if reversed number is also prime and different
    return is_prime(reversed_num) and reversed_num != num

# Test with example
n = 97
print(f"Is {n} an Emirp number? {is_emirp(n)}")

# Test with more examples
test_numbers = [13, 17, 31, 37, 71, 73, 79, 97]
for num in test_numbers:
    result = is_emirp(num)
    reversed_num = reverse_number(num)
    print(f"{num} (reverse: {reversed_num}) - Emirp: {result}")
Is 97 an Emirp number? True
13 (reverse: 31) - Emirp: True
17 (reverse: 71) - Emirp: True
31 (reverse: 13) - Emirp: True
37 (reverse: 73) - Emirp: True
71 (reverse: 17) - Emirp: True
73 (reverse: 37) - Emirp: True
79 (reverse: 97) - Emirp: True
97 (reverse: 79) - Emirp: True

Key Points

  • Prime Check Optimization: The prime checking function is optimized to check only odd divisors up to the square root
  • Palindromic Primes: Numbers like 11 are not Emirp because their reverse is the same as the original
  • Integer Division: Using // for integer division instead of int(num / 10)

Alternative Approach Using String Reversal

You can also reverse the number using string operations ?

def is_emirp_string(num):
    if not is_prime(num):
        return False
    
    # Convert to string, reverse, and convert back to int
    reversed_num = int(str(num)[::-1])
    
    return is_prime(reversed_num) and reversed_num != num

# Test the string approach
n = 97
print(f"Using string method - Is {n} Emirp? {is_emirp_string(n)}")
Using string method - Is 97 Emirp? True

Conclusion

An Emirp number must be prime and produce a different prime when its digits are reversed. The mathematical approach using modulo operations is more efficient, while the string reversal method is more readable for simple cases.

Updated on: 2026-03-25T15:07:31+05:30

1K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements