다음 C 프로그램은 2부터 30까지 자연수 중 진약수의 합이 자기 자신과 같은 수를 찾아 모두 더한다. 출력되는 정수를 쓰시오.
#include <stdio.h>
int proper_sum(int value) {
int sum = 1;
for (int divisor = 2; divisor * divisor <= value; divisor++) {
if (value % divisor == 0) {
sum += divisor;
if (divisor != value / divisor) {
sum += value / divisor;
}
}
}
return sum;
}
int main(void) {
int total = 0;
for (int value = 2; value <= 30; value++) {
if (proper_sum(value) == value) {
total += value;
}
}
printf("%d", total);
return 0;
}모범답안
34
풀이와 판단 근거
proper_sum은 1을 먼저 포함하고, 제곱근 이하의 divisor가 약수이면 짝 약수 value/divisor도 더한다. 제곱수에서는 같은 약수를 두 번 더하지 않는다.
30 이하에서 진약수 합이 자기 자신과 같은 수는 6과 28이며, main은 두 값을 total에 누적한다. 따라서 출력은 6+28=34다.
자주 틀리는 지점
- 완전수의 개수인 2를 답함
- divisor와 짝 약수를 모두 더하는 구조를 놓쳐 28을 제외함
- 제곱근 조건 때문에 큰 약수가 전혀 더해지지 않는다고 봄
자동 판정 방식
한글·영문 동의어와 문항별 필수 개념을 확인하며, 정답 단어가 부정되거나 반대 개념과 함께 쓰이면 자동 정답으로 확정하지 않습니다. 부분점수는 ITPASSLAB의 학습용 예상 점수입니다.