니코마코스(서기 60~120년)가 양의 정수를 분류한 체계에 따라, 어떤 수가 완전수, 과잉수, 부족수인지 판별해요.
그리스 수학자 니코마코스는 양의 정수를 분류하는 체계를 고안했어요. 각 수를 진약수의 합에 따라 완전수, 과잉수, 부족수 중 하나로 구분하는 방식이었죠.
_진약수의 합_은 어떤 수의 약수 중에서 자기 자신을 제외한 것들의 합으로 정의해요.
예를 들어, 15의 진약수의 합은 1 + 3 + 5 = 9예요.
어떤 수가 진약수의 합과 같으면 완전수예요. 예를 들어:
6은 1 + 2 + 3 = 6이므로 완전수예요.28은 1 + 2 + 4 + 7 + 14 = 28이므로 완전수예요.어떤 수가 진약수의 합보다 작으면 과잉수예요. 예를 들어:
12는 1 + 2 + 3 + 4 + 6 = 16이므로 과잉수예요.24는 1 + 2 + 3 + 4 + 6 + 8 + 12 = 36이므로 과잉수예요.어떤 수가 진약수의 합보다 크면 부족수예요. 예를 들어:
8은 1 + 2 + 4 = 7이므로 부족수예요.주어진 수가 완전수인지 판별하는 방법을 구현해요. 사용하는 언어 트랙에 따라 주어진 수가 과잉수인지 부족수인지 판별하는 방법도 구현해야 할 수 있어요.
때로는 예외를 발생시켜야 할 때가 있어요. 이때는 오류의 원인이 무엇인지 알려 주는 의미 있는 오류 메시지를 항상 함께 넣어야 해요. 그래야 코드를 더 읽기 쉽게 만들 수 있고 디버깅에도 큰 도움이 돼요. 오류의 원인이 특정 유형이라는 것을 알고 있는 경우에는 내장 오류 유형 중 하나를 발생시켜도 되지만, 그래도 의미 있는 메시지는 꼭 함께 넣어야 해요.
이 연습 문제에서는 classify() 함수에 양의 정수 가 아닌 수가 전달되면 raise 문을 사용해 ValueError를 "던져야" 해요. 테스트는 exception을 raise하고 그에 대한 메시지도 함께 넣어야만 통과해요.
메시지와 함께 ValueError를 발생시키려면, 메시지를 exception 타입의 인자로 작성해요.
# if a number to be classified is less than 1.
raise ValueError("Classification is only possible for positive integers.")
Exercism에 가입하고 Python 트랙을 개념 17개연습 문제 146개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.