#include <stdio.h>
#include <inttypes.h>

typedef intmax_t integer;

integer f(integer n){
    integer sum = 1;

    for (integer i=2; i * i <= n; ++i){
        imaxdiv_t d = imaxdiv(n, i);
        if (!d.rem){
            sum += i;
            if (d.quot != i)
                sum += d.quot;
        }
    }

    return sum;
}

int main(){
    integer n;
    printf("2 이상 %jd 이하의 자연수를 입력하시오: ", INTMAX_MAX);
    if (scanf("%jd", &n) == 1){
        integer fn = f(n);

        printf("n = %jd\nf(n) = %jd\n", n, fn);
        if (n == fn)
            printf("%jd는 완전수\n", n);
        else if (n > fn)
            printf("%jd는 부족수\n", n);
        else if (n < fn)
            printf("%jd는 초과수\n", n);
    }
    return 0;
}