완전수

2024. 11. 28. 14:16정보처리,전산/Clang

반응형
#include <stdio.h>

int complete(int n) {
    int sum = 0;
    for (int j = 1; j <= n / 2; j++) { // 약수는 n의 절반을 넘지 않음
        if (n % j == 0) {
            sum += j; // 약수들의 합 계산
        }
    }
    return (sum == n); // 약수의 합이 원래 숫자와 같으면 완전수
}

int main() {
    int s = 0;
    for (int i = 1; i <= 100; i++) {
        if (complete(i)) { // 완전수인지 확인
            s += i; // 완전수라면 합산
        }
    }
    printf("완전수의 합: %d\n", s); // 결과 출력
    return 0;
}

코드 해석 (순서대로)

1. complete(int n) 함수

  • 입력된 정수 n이 완전수(perfect number)인지 확인하는 함수.
  • 완전수란 자기 자신을 제외한 약수의 합이 자기 자신과 같은 수를 의미함.
  • 로직:
    1. sum 변수를 0으로 초기화.
    2. 1부터 n / 2까지 반복하며, n의 약수(j)를 찾음.
    3. 약수를 찾으면 그 값을 sum에 누적.
    4. sum과 n이 같으면 1(참)을 반환, 그렇지 않으면 0(거짓)을 반환.

2. main() 함수

  • 1부터 100까지 숫자 중에서 완전수를 찾아 합산.
  • 로직:
    1. 변수 s를 0으로 초기화.
    2. i를 1부터 100까지 증가시키며 반복:
      • complete(i)를 호출해 i가 완전수인지 확인.
      • 완전수라면 s에 더함.
    3. 반복 종료 후, 완전수의 총합을 출력.

코드 실행 흐름

  1. complete() 함수: 특정 숫자 i가 완전수인지 판단.
    • , complete(6) 호출 시:
      • 6의 약수: 1, 2, 3 → 합 = 6 → 반환값 1.
      • complete(10) 호출 시:
        • 10의 약수: 1, 2, 5 → 합 = 8 → 반환값 0.
  2. main() 함수: 1~100의 완전수를 찾아 합산.
    • 1부터 100까지의 숫자를 하나씩 complete()로 확인.
    • 완전수로 확인된 숫자는 s에 누적:
      • 예: 6, 28 등이 완전수 → 결과적으로 s = 6 + 28 = 34.
  3. 결과적으로 출력: "완전수의 합: 34".
반응형