되는대로 살자

[C언어 기출문제&풀이] 완전수 본문

2009~2014/C/C++

[C언어 기출문제&풀이] 완전수

malu 2010. 11. 2. 21:35

프로그램 명: dcomplete
제한시간: 2 초
완전수란 자신을 제외한 약수의 합이 자신이 되는 수를 완전수라 한다.

6 은 완전수이다. 6 의 약수는

1 2 3 6
이 중 자신을 제외한 약수의 합 1 + 2 + 3 = 6 즉 6 은 완전수이다.

자연수 n 을 입력으로 받아 , 1 부터 n 까지 수 중 완전수를 모두 출력하는 프로그램을 작성하시오.

입력

10000 이하의 자연수가 입력으로 주어진다.

출력

완전수를 크기 순으로 한 줄에 하나씩 출력한다.

입출력 예

입력

10

출력

6

입력

30

출력

6
28
풀이 : 약수 구하는 함수또는 알고리즘을 이용하여(앞에 만듬) 완전수임을 확인하고 출력한다.
소스코드  
01#include <stdio.h>
02  
03#define MIN_NUM 1
04  
05  
06bool CompleteNumberCheck(int num)
07{
08    int Sum=0;
09    for(int i=0;i< num;i++)
10    {
11        if(i==0)continue;//0을 제외 시킨다.
12        if(!(num%i))//약수의 합을 구한다.
13        Sum+=i; 
14    }
15    if(Sum==num)return true;
16    else return false;
17}
18  
19int main(void)
20{
21    int num;
22    scanf("%d",&num);
23    for(int i=MIN_NUM;i<=num;i++)
24        if(CompleteNumberCheck(i)) printf("%d\n",i); 
25return 0;
26}