다음 C 프로그램에서 출력 결과를 쓰시오.
#include <stdio.h>
int main(void) {
int n;
int k;
int s;
int el = 0;
for(n=6; n<=30; n++){
s=0;
k=n/2;
for(int j=1; j<=k; j++){
if(n%j==0){
s=s+j;
}
}
if(s==n){
el++;
}
}
printf("%d", el);
return 0;
}
n : 검사할 현재 수k = n/2 : 약수를 검사할 최대 범위 (n의 절반까지만 보면 됨)s : 약수들의 합el : 완전수 개수 누적n을 6부터 30까지 검사j=1부터 j<=n/2까지 나눠보며 약수 판별%if(n % j == 0) → j가 n을 나누어떨어뜨리면 j는 약수s += jif(s == n){
el++;
}
s가 n과 같으면 완전수el 증가검사 범위: n=6 ~ 30
n=6 → 약수 1+2+3 = 6 → 완전수 ✅
n=28 → 약수 1+2+4+7+14 = 28 → 완전수 ✅
그 외에는 완전수가 아님
따라서 완전수 개수 el = 2
2
이 문제에서 꼭 알아야 할 개념: