완전수

완전수

쉬움

지침

니코마코스(서기 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.")
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Python Exercism

완전수 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Python 트랙을 개념 17개연습 문제 146개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.