C Program to Check given Number is Perfect Number or Not

In this tutorial, we will learn about how to create a program in C that will ask from user to enter any number (at run-time) as input to check whether the given number is a perfect number or not. A perfect number is a number in which, factor's sum is equals to the Number itself.

Check Perfect Number or Not in C

The question is, write a program in C that checks whether a given number is a perfect number or not. The program given below is its answer. 6 is a perfect number because 1, 2, and 3 are the three factors of 6 and after summing it up, you will get the same number itself as in case of 6:

#include<stdio.h>
#include<conio.h>
int main()
{
    int num, sum=0, i;
    printf("Enter any number: ");
    scanf("%d", &num);
    for(i=1; i<num; i++)
    {
        if(num%i == 0)
            sum = sum + i;
    }
    if(num == sum)
        printf("\nIt's a Perfect Number.");
    else
        printf("\nIt's not a Perfect Number.");
    getch();
    return 0;
}

The above program was build and run under Code::Blocks IDE, here is the output. This is first snapshot of the sample run:

c program check perfect number

Supply any number say 6 and press ENTER key to see that the given number is a perfect number or not. This is the second snapshot of the sample run:

c program perfect number or not

Let's check for another number say 24. Here is the sample run in case of 24 (as input):

check perfect number or not

As the factor of 24 is 1, 2, 3, 4, 6, 8, 12 and if you will find the sum of all these factors, that is 1+2+3+4+6+8+12 is equal to 36 which is not equal to the number itself (24 here). Therefore, according to the definition of perfect number given here, 24 is not a perfect number.

Below are the list of some main steps used in above program:

  • Receive any number as input say 6
  • Create a for loop starts from 1 to one less than the number itself (5 if input is 6)
  • Check whether the number is divisible by any of the number from 1 to one less than the number that is 5
  • If it is, then add this number to the sum and continue to check for the next number
  • At first run, i holds 1 and therefore if statement evaluates like, num%i == 0 or 6%1 == 0, or 0 == 0. As while dividing 6 by 1, we will not get any remainder, therefore this evaluates to be true and inside the if block the statement say sum = sum + i or sum = 0 + 1 or sum = 1 will run
  • Never forgot to initialize the sum variable with 0 at start of the program
  • At second run, i holds 2 and again 6 will be divisible by 2 without leaving any remainder, therefore again inside the if block, the statement sum = sum + i or sum = 1 + 2 or sum = 3 will run. Or 3 will be initialized to the sum variable
  • In this way, at third, fourth and fifth run of the for loop we have to process the same steps
  • At last run, sum will have the value 6 which is equal to the number itself, therefore here we have concluded that all the factor's sum of the given number that is 6, is equal to the number itself that is 6
  • Therefore, it is a perfect number
  • To print it out, check whether the original number is equal to the factor's sum of the given number or not
  • If it is, then print it out as a perfect number
  • Otherwise, print it out as not a perfect number

Print all Perfect Number in given Range in C

Here is another program on perfect number. This program will ask from the user to enter any two number as starting and ending number or point to check and print all the perfect number exists in between the given two number:

#include<stdio.h>
#include<conio.h>
int main()
{
    int n1, n2, i, j, sum, temp;
    printf("Enter the value of n1 (starting point): ");
    scanf("%d", &n1);
    printf("Enter the value of n2 (ending point): ");
    scanf("%d", &n2);
    printf("\nPerfect numbers between %d to %d are:\n", n1, n2);
    for(i=n1; i<=n2; i++)
    {
        temp = i;
        sum = 0;
        for(j=1; j<i; j++)
        {
            if(i%j==0)
            {
                sum = sum + j;
            }
        }
        if(temp==sum)
        {
            printf("%d\n", sum);
        }
    }
    getch();
    return 0;
}

Here is the first snapshot of the sample run:

print all perfect number c

Supply any two number say 1 as starting and 1000 as ending to see all the perfect number exists between these two number. Here is the second snapshot of the sample run:

find all perfect number c

C Online Test


« Previous Program Next Program »