강한 수(Strong Number)란?
강한 수(Strong Number)는 각 자릿수의 팩토리얼 값을 모두 더한 합이 자기 자신과 같은 수를 의미합니다. 대표적인 예로 145가 있으며, 그 이유는 다음과 같습니다.
- 1! = 1
- 4! = 24
- 5! = 120
- 합계: 1 + 24 + 120 = 145 ✓
이처럼 자릿수 팩토리얼의 합이 원래 수와 일치할 때 해당 숫자를 강한 수라고 부릅니다.
1단계: 팩토리얼 함수 만들기
먼저 특정 숫자의 팩토리얼을 계산하는 함수를 작성합니다. while 반복문을 사용하면 간단하게 구현할 수 있습니다.
def factorial(n):
num = 1
while n >= 1:
num = num * n
n = n - 1
return num
2단계: 강한 수 출력하기
이제 주어진 범위 안의 모든 숫자를 검사해 강한 수를 찾아 출력하는 코드를 작성해 보겠습니다. 숫자를 문자열로 변환한 뒤 각 자릿수로 분리하고, 각 자릿수의 팩토리얼을 더해 원래 수와 비교하는 방식입니다.
def print_strong_nums(start, end):
for i in range(start, end + 1):
# 숫자를 자릿수 리스트로 변환
digits = list(map(int, str(i)))
total = 0
for d in digits:
total += factorial(d)
if total == i:
print(i)
print_strong_nums(1, 380)
실행 결과
1
2
145
결과 해석
1부터 380 사이에는 세 개의 강한 수가 존재합니다.
- 1: 1! = 1
- 2: 2! = 2
- 145: 1! + 4! + 5! = 1 + 24 + 120 = 145
참고로 탐색 범위를 넓히면 40585 역시 강한 수에 해당합니다(4! + 0! + 5! + 8! + 5! = 24 + 1 + 120 + 40320 + 120 = 40585). 실제로 강한 수는 매우 드물어, 알려진 강한 수는 1, 2, 145, 40585 네 개뿐입니다.