Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어로 완전수(Perfect Number) 판별하기 – 주어진 숫자가 완전수인지 확인하는 프로그램

완전수(Perfect Number)란 자기 자신을 제외한 약수의 합이 자기 자신과 같은 수를 말합니다. 이를 다르게 표현하면, 모든 약수의 합이 2×자기 자신과 같은 수입니다. 대표적인 예로 28이 있는데, 28의 약수는 1, 2, 4, 7, 14, 28이며 이들의 합은 56으로 28의 두 배와 정확히 일치합니다.

알고리즘

완전수 여부를 판별하는 알고리즘은 아래와 같습니다.

START
Step 1: 정수형 변수를 선언하고 result=0으로 초기화한다.
Step 2: 실행 시점에 숫자를 입력받는다.
Step 3: for 반복문 i=1; i<=number; i++
조건이 만족되면
   i. if(number%i==0)
   ii. result=result+i;
Step 4: 약수의 합을 검사한다.
   i. if(result==2*number)
   ii. "perfect number"(완전수) 출력
   iii. 아니면 "not perfect number"(완전수 아님) 출력
STOP

C 프로그램 코드

다음은 입력받은 숫자가 완전수인지 아닌지를 판별하는 C 프로그램 전체 코드입니다.

#include<stdio.h>
int main(){
   int number,i,result=0;// 변수 선언 후 result를 0으로 초기화
   printf("enter the number:");
   scanf("%d",&number);
   for(i=1;i<=number;i++){
      if(number%i==0)
         result=result+i;
   }
   if(result==2*number) // 약수의 합이 2*number와 같은지 검사
      printf("perfect number");
   else
      printf("not perfect number");
}

실행 결과

위 프로그램의 실행 결과는 다음과 같습니다.

enter the number:28
perfect number
enter the number:46
not perfect number

코드 동작 원리

이 프로그램은 1부터 입력받은 숫자까지 차례대로 나누어 떨어지는 값, 즉 모든 약수를 찾아 합산합니다. 그런 다음 약수의 총합이 입력값의 두 배와 같은지 비교합니다. 만약 같다면 자기 자신을 제외한 약수의 합이 자기 자신과 같다는 뜻이므로 완전수로 판정됩니다.

예를 들어 28을 입력하면 약수의 합이 1+2+4+7+14+28=56이 되어 2×28과 일치하므로 "perfect number"가 출력됩니다. 반면 46의 경우 약수의 합이 1+2+23+46=72로 2×46인 92와 일치하지 않기 때문에 "not perfect number"가 출력됩니다.