Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
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 ofint(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.
