728x90
완전수 : 한 정수 N과 N의 약수들의 합이 같은 수
예를 들어, 6의 약수는 1, 2, 3 이고 약수들을 더하면 6이다.
약수의 합과 그 수가 같으니 완전수.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#include <stdio.h>
int main(void)
{
int n, i, j, sum;
int ndiv, div[1000]; // 약수 보관 장소
n = 10000;
for (i = 2; i <= n; i++) {
sum = 0; //
ndiv = 0; // 약수의 갯수를 초기화 한다.
// 2 ~ i/2 수 중에서 i의 약수를 구해서 sum 에 더하고 div[]에 저장한다
/*약수 구하기*/
for (j = 1; j <= i / 2; j++) {
if (i % j == 0) {//j가 i의 약수
sum += j;
div[ndiv] = j;
ndiv++;
}
}
// i == sum 이면 완전수 이므로 i와 div[]를 6 = 1 + 2 + 3 식으로 출력한다.
if (i == sum) {//수와 약수의 합이 같다면 완전수
printf("%d = \n", i);//완전수 출력
for (j = 0; j < ndiv; j++) {//
printf("%d ", div[j]);
}
printf("\n");
}
}
return 0;
}
|
cs |
설명)
일단 1~10000까지의 수 중에 완전수를 구하려고 함.
완전수를 구하려면 우선 그 수의 약수를 구해야한다.
14~20) 변수j를 1부터 계속 증가시키며 변수i의 약수인지 검사한다. 만약, 약수라면 div[ndiv]배열에 약수를 저장하고 다음 인덱스에 넣기위해 ndiv++를 해준다. 약수의 합도 필요하기 때문에 sum += j으로 누적된 약수의 합을 구한다.
23~29) 여기서는 약수의 합과 i가 같은지 검사한다. 만약 같다면 완전수다. 만약 같다면, 완전수라는 뜻으로 i를 출력한다. 그리고 약수들을 쭉 출력해야하기 때문에 for문으로 div[ndiv]에 있는 원소들을 출력 해준다.
728x90
'C프로그래밍 > Programming Lab(학교수업)' 카테고리의 다른 글
피보나치 수열 재귀함수로 표현하기 (0) | 2022.11.23 |
---|---|
솟수 구하기 (2) | 2022.11.19 |
Lab09실습 - 파일 입출력을 이용한 전화번호부 (1) | 2022.11.04 |
9주차 퀴즈 (0) | 2022.10.26 |