에미럽(Emirp) 수란?
에미럽 수(Emirp Number)는 'prime'이라는 단어를 거꾸로 쓴 'emirp'에서 유래한 이름으로, 자릿수를 거꾸로 뒤집었을 때 원래 수와 다른 또 하나의 소수가 되는 소수를 의미합니다.
예를 들어 입력값이 n = 97이라면, 97은 소수이고 이를 뒤집으면 79가 되는데, 79 역시 소수입니다. 따라서 결과는 True가 됩니다.
참고로 11, 101처럼 뒤집어도 같은 수가 되는 회문 소수(palindromic prime)는 에미럽 수에 포함되지 않습니다.
문제 해결 접근 방법
주어진 수가 에미럽 수인지 확인하기 위해 다음 단계를 따릅니다.
- num이 소수가 아니라면
False를 반환합니다. - num의 자릿수를 뒤집은 값을 reverse_num에 저장합니다.
- reverse_num이 소수이면
True, 그렇지 않으면False를 반환합니다.
예제 코드
다음 구현을 통해 더 잘 이해할 수 있습니다.
def is_prime(num):
if num <= 1:
return False
for i in range(2, num):
if num % i == 0:
return False
return True
def solve(num):
# 먼저 원래 수가 소수인지 확인
if not is_prime(num):
return False
# 자릿수를 뒤집기
reverse_num = 0
while num != 0:
d = num % 10
reverse_num = reverse_num * 10 + d
num = int(num / 10)
# 뒤집힌 수가 소수인지 확인
return is_prime(reverse_num)
n = 97
print(solve(n))
입력
97
출력
True
코드 설명
is_prime() 함수는 1 이하의 수를 제외하고, 2부터 num-1까지의 모든 수로 나누어 떨어지는지 검사하여 소수 여부를 판별합니다.
solve() 함수는 먼저 원래 수가 소수인지 확인한 후, 나머지 연산(%)과 정수 나눗셈을 이용해 각 자릿수를 추출하고 뒤집힌 수를 만듭니다. 마지막으로 뒤집힌 수가 소수인지 검사하여 최종 결과를 반환합니다.
13, 17, 31, 37, 71, 73, 79, 97 등이 대표적인 에미럽 수의 예이며, 이 방법은 이러한 수들을 손쉽게 판별할 수 있습니다.