본문 바로가기

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

[449] 완전수 쉽게 배우기

1. 완전수란 무엇일까?

완전수는 자신을 제외한 모든 약수의 합이 자기 자신과 같은 수를 말해.

먼저, 진약수라는 개념을 알아보자.

진약수자기 자신을 제외한 약수를 뜻해.

예를 들어, 숫자 6의 약수는 1, 2, 3, 6인데, 이 중 6을 뺀 1, 2, 3이 바로 6의 진약수야.

진약수의 합에 따라 숫자는 세 가지로 나눌 수 있어.

 

완전수: 진약수의 합이 자기 자신과 같은 수

예: 6의 진약수는 1, 2, 3이고, 이걸 더하면 6이 돼. 그래서 6은 완전수야!

 

부족수: 진약수의 합이 자기 자신보다 작은 수

예: 8의 진약수는 1, 2, 4이고, 이걸 더하면 7이야. 7은 8보다 작으니까, 8은 부족수야.

 

과잉수: 진약수의 합이 자기 자신보다 큰 수

예: 12의 진약수는 1, 2, 3, 4, 6이고, 이걸 더하면 16이 돼. 16은 12보다 크니까, 12는 과잉수야.

 

이렇게 숫자들이 진약수의 합에 따라 완전수, 부족수, 과잉수로 나뉘는 거야!

완전수는 오랜 옛날부터 사람들이 특별하고 신기한 숫자로 여겼어.

고대 그리스 수학자 피타고라스도 완전수를 아주 중요하게 생각했다고 해.

이제 우리가 이 완전수의 신비로운 세계로 들어가 볼 차례야! 😊

2. 완전수의 실생활 예시

완전수는 생각보다 많지 않지만, 몇 가지 대표적인 숫자들이 있어. 지금부터 쉽게 이해할 수 있는 완전수 세 개를 소개할게!

 

6

약수: 1, 2, 3, 6

진약수(자기 자신 제외): 1, 2, 3

진약수의 합: 1 + 2 + 3 = 6

→ 그래서 6완전수야!

 

28

약수: 1, 2, 4, 7, 14, 28

진약수: 1, 2, 4, 7, 14

진약수의 합: 1 + 2 + 4 + 7 + 14 = 28

28완전수지!

 

496

약수: 1, 2, 4, 8, 16, 31, 62, 124, 248, 496

진약수: 1, 2, 4, 8, 16, 31, 62, 124, 248

진약수의 합: 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248 = 496

→ 그래서 496 역시 완전수야!

 

이렇게 6, 28, 496은 모두 완전수라는 걸 알 수 있어. 이 외에도 더 큰 완전수들이 있지만, 처음에는 이 세 가지를 기억하면 충분해! 😊

3. 완전수와 메르센 소수의 관계

이제 이 완전수들을 조금 더 자세히 살펴보면서 특별한 규칙을 발견해보자!

첫 번째 완전수: 6

6을 두 수의 곱으로 나타내보자.

\[6=2 \times 3\]

여기서 3소수야!

이 3을 이렇게 바꿔볼 수 있어.

\[3=2^{2}-1\]

이렇게 2의 거듭제곱에서 1을 뺀 수메르센 수라고 하고 그 중 소수를 메르센 소수라고 해.

즉, 3메르센 소수야.

두 번째 완전수: 28

28도 두 수의 곱으로 나타내보자.

\[28=4\times7\]

여기서 4는 \(2^{2}\), 그리고 7소수야!

그런데 이 7도 다시 보면

\[7 = 2^{3}-1\]

맞아! 7 역시 메르센 소수야!

세 번째 완전수: 496

이번엔 496을 나눠보자.

\[496 = 16 \times 31\]

여기서 16은 \(2^{4}\)이고, 31은 소수야.

그리고 31은

\[31 = 2^{5}-1\]

놀랍게도 31메르센 소수야!

자, 이제 규칙이 보이지?

\[
\begin{align}
6 &= 2^1 \times (2^2 - 1) \\
28 &= 2^2 \times (2^3 - 1) \\
496 &= 2^4 \times (2^5 - 1)
\end{align}
\]

이걸 조금 더 일반적인 형태로 바꿔보면

\[완전수=2^{p-1} \times (2^{p}-1)\]

여기서 p는 소수고, \((2^{p} - 1)\)은 메르센 소수야!

4. 완전수와 삼각수의 관계

이제 삼각수를 살펴보자.

삼각수자연수차곡차곡 더한 수야.

마치 동그라미로 삼각형을 만든다고 상상해봐!

1번째 삼각수: 1
2번째 삼각수: 1 + 2 = 3

●  ●
3번째 삼각수: 1 + 2 + 3 = 6

●  ●
●  ●  ●
4번째 삼각수: 1 + 2 + 3 + 4 = 10

●  ●
●  ●  ●
●  ●  ●  ●
5번째 삼각수: 1 + 2 + 3 + 4 + 5 = 15

●  ●
●  ●  ●
●  ●  ●  ●
●  ●  ●  ●  ●
6번째 삼각수: 1 + 2 + 3 + 4 + 5 + 6 = 21

●  ●
●  ●  ●
●  ●  ●  ●
●  ●  ●  ●  ●
●  ●  ●  ●  ●  ●
7번째 삼각수: 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28

●  ●
●  ●  ●
●  ●  ●  ●
●  ●  ●  ●  ●
●  ●  ●  ●  ●  ●
●  ●  ●  ●  ●  ●  ●

여기서 특별한 패턴이 보여!

3번째 삼각수 = 6완전수!

7번째 삼각수 = 28완전수!

이제 삼각수의 공식을 통해 이 관계를 더 자세히 살펴보자.

삼각수 공식

n번째 삼각수는 위에서 본 것처럼 1부터 n까지의 합으로 나타낼 수 있어.

따라서 삼각수는 다음과 같이 1부터 n까지의 합을 구하는 공식으로 구할 수 있어.

\[T_n=\frac{n(n+1)}{2}\]

여기서 Tₙn번째 삼각수를 뜻해.

삼각수 공식과 완전수 공식의 연결

여기서 흥미로운 점은, 이 삼각수 공식이 완전수 공식으로 변형될 수 있다는 거야!

우리가 발견한 짝수 완전수 공식

\[완전수 = 2^{p-1} \times (2^p - 1)\]

이제 이 공식을 삼각수 공식과 비교해볼게.

삼각수 공식은

\[T_n = \frac{n(n+1)}{2}\]

만약 \(n = 2^{p}-1\)이라고 가정하면 다음과 같이 변형할 수 있어.

\[T_{2^{p}-1} = \frac{(2^{p}-1) \times 2^{p}}{2} = 2^{p-1} \times (2^p - 1)\]

이렇게 삼각수 공식과 완전수 공식이 연결되는 거야!
즉, 특정한 삼각수는 완전수와 같은 형태로 나타날 수 있어.

이건 완전수의 특별한 패턴을 보여주는 멋진 예지!

특히, 메르센 소수 번째의 삼각수는 완전수가 되는거야.

예시로 확인해보자!

3(첫 번째 메르센 소수)번째 삼각수
\[T_3 = \frac{3 \times (3 + 1)}{2} = \frac{3 \times 4}{2} = 6\]→ 6은 첫 번째 완전수!
7(두 번째 메르센 소수)번째 삼각수
\[T_7 = \frac{7 \times (7 + 1)}{2} = \frac{7 \times 8}{2} = 28\]
→ 28도 두 번째 완전수!
31(세 번째 메르센 소수)번째 삼각수
\[T_31 = \frac{31 \times (31 + 1)}{2} = \frac{31 \times 32}{2} = 496\]
→ 496도 세 번째 완전수!

5. 완전수를 찾는 간단한 파이썬 코드

# 1부터 10000 사이의 완전수를 찾는 코드

def is_perfect(number):
    divisors = [i for i in range(1, number) if number % i == 0]
    return sum(divisors) == number

for num in range(1, 10001):
    if is_perfect(num):
        print(f"완전수 발견! {num}")

6. 완전수와 관련된 연습 문제 및 예시 답안

문제 1. 1부터 100까지의 완전수 찾기

더보기
for num in range(1, 101):
    if is_perfect(num):
        print(f"완전수 발견! {num}")

문제 2. 주어진 숫자가 완전수인지 확인하기

더보기
number = int(input("숫자를 입력하세요: "))
if is_perfect(number):
    print(f"{number}는 완전수입니다!")
else:
    print(f"{number}는 완전수가 아닙니다.")

 

문제 3. 10000 이하의 모든 완전수 찾기

더보기
for num in range(1, 10001):
    if is_perfect(num):
        print(f"완전수 발견! {num}")

문제 4. 완전수와 삼각수 비교하기

더보기
def triangle_number(n):
    return n * (n + 1) // 2
    
for i in range(1, 101):
    t_num = triangle_number(i)
    if is_perfect(t_num):
        print(f"삼각수 {t_num}는 완전수입니다!")

문제 5. 나만의 완전수 탐색기 만들기

더보기
start = int(input("시작 숫자를 입력하세요: "))
end = int(input("끝 숫자를 입력하세요: "))

for num in range(start, end + 1):
    if is_perfect(num):
        print(f"완전수 발견! {num}")