니코마코스(서기 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를 호출하는 쪽이 0이 아닌 입력만 넘길 책임이 있다고 가정해요.
그러니 classify 함수가 입력이 0이 아님을 assert 하도록 만들어 봐요.
자세한 내용은 Zig Language Reference와 std.debug.assert의 구현을 참고해요.
다만 이 연습 문제는 현재 입력이 0인 경우를 테스트하지 않아요 (std.testing이 패닉이 발생하기를 기대하는 기능을 아직 지원하지 않기 때문이에요).