#include <stdio.h>
int isPerfectNum(int num) {
int sum = 0;
for (int i = 1; i < num; i++) { // num보다 작은 수를 반복
if (num % i == 0) // num이 i로 나누어떨어지는 경우 (약수)
sum += i; // 약수의 합계
}
if (num == sum) return 1; // 약수의 합이 num과 같은 경우 (완전수)
else return 0;
}
int main() {
int r = 0; // 완전수의 개수를 저장할 변수 r
for (int i = 1; i <= 100; i++) // 1부터 100까지 반복
if (isPerfectNum(i)) // i가 완전수인지 확인
r++; // 완전수일 경우 r 값 증가
printf("%d", r); // 최종적으로 완전수의 개수를 출력
return 0;
}
코드 분석
1. isPerfectNum(int num) 함수는 입력받은 숫자 num이 완전수인지 확인하는 함수입니다.
• for 루프를 사용하여 num보다 작은 모든 숫자에 대해 num이 해당 숫자로 나누어떨어지는지 (num % i == 0) 확인하고, 나누어떨어지면 sum에 더합니다.
• sum이 num과 같다면 1을 반환하고, 그렇지 않으면 0을 반환합니다.
2. main() 함수에서는 1부터 100까지 반복하며 isPerfectNum(i) 함수를 통해 완전수를 확인하고, 완전수일 경우 변수 r을 증가시킵니다.
3. 프로그램은 최종적으로 r 값을 출력합니다.
실행 결과
1부터 100 사이의 완전수는 6과 28 두 개뿐입니다. 따라서 r의 값은 2가 됩니다.
출력 결과
2
이와 같이 C 프로그램의 실행 결과는 2입니다. 직접 실행해서 확인해야 하는 경우, 해당 코드를 C 언어 컴파일러 (예: GCC, Visual Studio Code 등)로 실행하시면 동일한 결과 확인 가능
완전수(perfect number)는 자신을 제외한 약수들의 합이 자신과 같은 수를 의미합니다. 예를 들어, 6과 28이 완전수인 이유를 설명하겠습니다.
1. 숫자 6이 완전수인 이유
숫자 6의 약수를 구해보면 다음과 같습니다:
• 6의 약수: 1, 2, 3, 6
완전수를 판단할 때는 자신을 제외한 약수들을 모두 더해야 합니다. 따라서, 6을 제외한 약수는:
• 1, 2, 3
이 약수들을 더하면:
1 + 2 + 3 = 6
자신을 제외한 약수들의 합이 6과 같으므로, 6은 완전수입니다.
2. 숫자 28이 완전수인 이유
숫자 28의 약수를 구해보면 다음과 같습니다:
• 28의 약수: 1, 2, 4, 7, 14, 28
완전수를 판단할 때는 자신을 제외한 약수들을 모두 더해야 합니다. 따라서, 28을 제외한 약수는:
• 1, 2, 4, 7, 14
이 약수들을 더하면:
1 + 2 + 4 + 7 + 14 = 28
자신을 제외한 약수들의 합이 28과 같으므로, 28은 완전수입니다.
추가 설명: 완전수의 특징
• 완전수의 예시: 가장 작은 완전수는 6이고, 그 다음은 28입니다. 그 후로 496, 8128 등이 완전수입니다.
• 완전수의 성질: 완전수는 대부분 소수의 특성을 기반으로 만들어지며, 수학적으로는 다음과 같은 식을 통해 구할 수 있습니다:
• , 여기서 이 소수일 때 완전수가 됩니다.
이와 같이, 완전수는 그 숫자보다 작은 모든 약수의 합이 그 숫자와 같은 경우에 완전수로 정의되며, 6과 28은 이러한 조건을 만족하는 대표적인 예입니다.
'전산 관련 시험 > 프로그래밍(C, JAVA, Python)' 카테고리의 다른 글
[C] 프로그래밍 언어(23.2 01) (1) | 2024.10.06 |
---|---|
[JAVA] 프로그래밍 언어(23.3 12) (0) | 2024.10.06 |
[C] C언어 구조 이해 (0) | 2024.10.05 |
[C] 프로그래밍 언어 (23.3 04) (0) | 2024.10.05 |
[C] 프로그래밍 언어(23.3 03) (0) | 2024.10.05 |
댓글