fork download
  1. #include <stdio.h>
  2. #include <inttypes.h>
  3.  
  4. typedef intmax_t integer;
  5.  
  6. integer f(integer n){
  7. integer sum = 1;
  8.  
  9. for (integer i=2; i * i <= n; ++i){
  10. imaxdiv_t d = imaxdiv(n, i);
  11. if (!d.rem){
  12. sum += i;
  13. if (d.quot != i)
  14. sum += d.quot;
  15. }
  16. }
  17.  
  18. return sum;
  19. }
  20.  
  21. int main(){
  22. integer n;
  23. printf("2 이상 %jd 이하의 자연수를 입력하시오: ", INTMAX_MAX);
  24. if (scanf("%jd", &n) == 1){
  25. integer fn = f(n);
  26.  
  27. printf("n = %jd\nf(n) = %jd\n", n, fn);
  28. if (n == fn)
  29. printf("%jd는 완전수\n", n);
  30. else if (n > fn)
  31. printf("%jd는 부족수\n", n);
  32. else if (n < fn)
  33. printf("%jd는 초과수\n", n);
  34. }
  35. return 0;
  36. }
Success #stdin #stdout 0s 4476KB
stdin
4000000000
stdout
2 이상 9223372036854775807 이하의 자연수를 입력하시오: n = 4000000000
f(n) = 5997557570
4000000000는 초과수