본문 바로가기

2. 정보영재교육 수업 자료

[447] 메르센 수, 메르센 소수

1. 메르센 수

\(2^n-1\) 의 꼴의 수를 메르센 수라고 합니다.

메르센 수를 이진수로 나타내면 모든 자리가 1인 수입니다.

2. 하노이의 탑

\(n\)층의 하노이의 탑을 옮기는 횟수를 \(f(n)\)이라고 했을 때, 1층인 하노이의 탑을 옮기는 것은 1회이므로  \(f(1) = 1\)입니다.

\(n\)층의 하노이의 탑을 옮기려면 다음과 같은 과정을 거칩니다.

맨 밑의 한 개를 제외하고 \(n-1\)층을 일단 옮겨놓습니다. (\(f(n-1)\))

맨 밑의 한 개를 옮깁니다. (\(f(1)\))

다시 그 위에 \(n-1\)층을 옮겨놓으면 됩니다. (\(f(n-1)\))

이 식을 정리하면 다음과 같습니다.

\[
\begin{aligned}
f(n) &= f(n-1) \times 2 + 1 \\
     &= \big(f(n-2) \times 2 + 1\big) \times 2 + 1 = f(n-2) \times 2^2 + 2 + 1 \\
     &\;\;\vdots \\
     &= f(1) \times 2^{n-1} + 2^{n-2} + \cdots + 2^1 + 2^0 \\
     &= 2^n - 1
\end{aligned}
\]

이를 통해 하노이의 탑을 옮기는 횟수는 메르센 수라는 것을 알 수 있습니다.

3. 메르센 소수

메르센 수 중에서 소수인 메르센 수를 메르센 소수라고 합니다.

메르센 수의 2의 지수 \(n\)이 \(a\)와 \(b\)의 합성수라고 하면,

\[
2^{a \cdot b} - 1 = (2^a - 1) \cdot \left(2^{a(b-1)} + 2^{a(b-2)} + \cdots + 2^a + 1\right)
\]

위와 같이 인수분해되므로 메르센 수도 합성수가 됩니다.

따라서 메르센 소수일 때 2의 지수는 항상 소수입니다.

그러나 지수가 소수라고 메르센 소수가 되는 것은 아닙니다.(\(2^{11}-1 = 2047 = 23 \times 89\))

 

간단하게 \(n\)이 31까지 메르센 소수를 찾는 코드는 다음과 같습니다.

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

for i in range(2, 32):
    if is_prime(i) and is_prime(2**i -1):
        print(f"(2^{i})-1 = {2**i - 1}")
# (2^2)-1 = 3
# (2^3)-1 = 7
# (2^5)-1 = 31
# (2^7)-1 = 127
# (2^13)-1 = 8191
# (2^17)-1 = 131071
# (2^19)-1 = 524287
# (2^31)-1 = 2147483647