Posted on by Kalkicode
Code Number

Check if a given number is perfect number or not

The given problem is to check if a given number is a perfect number or not. A perfect number is a positive integer that is equal to the sum of its proper divisors, excluding itself. Proper divisors of a number are positive integers that divide the number evenly, leaving no remainder, but excluding the number itself.

Explanation with Suitable Example

Let's take an example to understand the concept of a perfect number. Consider the number 6.

The divisors of 6 are 1, 2, and 3 (excluding 6 itself). The sum of these divisors is 1 + 2 + 3 = 6. As the sum of divisors is equal to the number itself (6), it is a perfect number.

Pseudocode

To determine if a number is perfect or not, we can use the following pseudocode:

is_perfect_no(n):
    if n < 0:
        return False

    sum = 0
    for i from n/2 to 1 (inclusive):
        if n is divisible by i:
            sum += i

    if sum is equal to n:
        return True
    else:
        return False

Algorithm Explanation

  1. Start the is_perfect_no function with an input n representing the number to be checked.
  2. If n is less than 0, return False as negative numbers cannot be perfect numbers.
  3. Initialize a variable sum to 0 to keep track of the sum of divisors.
  4. Use a loop to iterate from n/2 down to 1 (inclusive) since any divisor greater than n/2 cannot be a proper divisor.
  5. Check if n is divisible by the current number i. If it is divisible, add i to the sum.
  6. After the loop, check if the sum is equal to n. If they are equal, return True, indicating that the number is perfect; otherwise, return False.
perfect number

Code Solution

Here given code implementation process.

//C Program
//Check if a given number is perfect number or not
#include <stdio.h>

//Check given number is perfect or not
int is_perfect_no(int n)
{
  
  if(n<0)
  {
    return 0;
  }
  int sum = 0;

  for (int i = (n/2); i>=1 ; i--)
  {
    if(n % i == 0)
    {
      sum+=i;
    }
  }

  if(sum==n)
  {
    return 1;
  }
  else
  {
    return 0;
  }
  
}



void perfect_number(int n)
{
  
  if(is_perfect_no(n))
  {
    printf("Is Perfect Number : %d",n );
  }
  else
  {
    printf("Is not a Perfect Number : %d",n );
  }
  
 printf("\n");
}


int main()
{
  perfect_number(6);
  perfect_number(24);
  perfect_number(8128);
  perfect_number(33550336);
  return 0;
}

Output

Is Perfect Number : 6
Is not a Perfect Number : 24
Is Perfect Number : 8128
Is Perfect Number : 33550336
/*
  C++ Program
  Check if a given number is perfect number or not
*/
#include <iostream>

using namespace std;
class Number {
  public:
    bool is_perfect_no(int n) {
      if (n < 0) {
        return false;
      }
      int sum = 0;
      for (int i = (n / 2); i >= 1; i--) {
        if (n % i == 0) {
          sum += i;
        }
      }
      if (sum == n) {
        return true;
      } else {
        return false;
      }
    }
  void perfect_number(int n) {
    if (this->is_perfect_no(n)) {
      cout << "Is Perfect Number : " << n << endl;
    } else {
      cout << "Is not a Perfect Number : " << n << endl;
    }
  }
};

int main() {
  Number obj;
  obj.perfect_number(6);
  obj.perfect_number(24);
  obj.perfect_number(8128);
  obj.perfect_number(33550336);
}

Output

Is Perfect Number : 6
Is not a Perfect Number : 24
Is Perfect Number : 8128
Is Perfect Number : 33550336
/*
  Java Program
  Check if a given number is perfect number or not
*/
public class Number {

  //Check given number is perfect or not
  public boolean is_perfect_no(int n) {

    if (n < 0) {
      return false;
    }
    int sum = 0;

    for (int i = (n / 2); i >= 1; i--) {
      if (n % i == 0) {
        sum += i;
      }
    }

    if (sum == n) {
      return true;
    } else {
      return false;
    }

  }
  void perfect_number(int n) {

    if (is_perfect_no(n)) {
      System.out.println("Is Perfect Number : " + n);
    } else {
      System.out.println("Is not a Perfect Number : " + n);
    }

  }


  public static void main(String[] args) {

    Number obj = new Number();
    obj.perfect_number(6);
    obj.perfect_number(24);
    obj.perfect_number(8128);
    obj.perfect_number(33550336);
   
  }
}

Output

Is Perfect Number : 6
Is not a Perfect Number : 24
Is Perfect Number : 8128
Is Perfect Number : 33550336
#Python3
#Check if a given number is perfect number or not
class Number :
  def is_perfect_no(self, n) :
    if (n < 0) :
      return False
    
    sumValue = 0
    i = int(n / 2)
    while ( i >= 1 ) :
      if (n % i == 0) :
        sumValue += i

      i -= 1
      
    
    if (sumValue == n) :
      return True
    else :
      return False
    
  
  def perfect_number(self, n) :
    if (self.is_perfect_no(n)) :
      print("Is Perfect Number : ", n)
    else :
      print("Is not a Perfect Number : ", n)
    
  
def main() :
  obj = Number()
  obj.perfect_number(6)
  obj.perfect_number(24)
  obj.perfect_number(8128)
  obj.perfect_number(33550336)
  

if __name__ == "__main__":
  main()

Output

Is Perfect Number :  6
Is not a Perfect Number :  24
Is Perfect Number :  8128
Is Perfect Number :  33550336
/*
  C# Program
  Check if a given number is perfect number or not
*/
using System;
public class Number {

  //Check given number is perfect or not
  public Boolean is_perfect_no(int n) {

    if (n < 0) {
      return false;
    }
    int sum = 0;

    for (int i = (n / 2); i >= 1; i--) {
      if (n % i == 0) {
        sum += i;
      }
    }

    if (sum == n) {
      return true;
    } else {
      return false;
    }

  }
  void perfect_number(int n) {

    if (is_perfect_no(n)) {
      Console.WriteLine("Is Perfect Number : " + n);
    } else {
      Console.WriteLine("Is not a Perfect Number : " + n);
    }

  }


  public static void Main(String[] args) {

    Number obj = new Number();
    obj.perfect_number(6);
    obj.perfect_number(24);
    obj.perfect_number(8128);
    obj.perfect_number(33550336);

  }
}

Output

Is Perfect Number : 6
Is not a Perfect Number : 24
Is Perfect Number : 8128
Is Perfect Number : 33550336
<?php
/*
  Php Program
  find Next Sparse Number
*/
class Number {
  public function is_perfect_no($n) {
    if ($n < 0) {
      return false;
    }
    $sum = 0;
    for ($i = intval($n / 2); $i >= 1; $i--) {
      if ($n % $i == 0) {
        $sum += $i;
      }
    }
    if ($sum == $n) {
      return true;
    } else {
      return false;
    }
  }

  function perfect_number($n) {
    if ($this->is_perfect_no($n)) {
      echo ("Is Perfect Number : ". $n."\n");
    } else {
      echo ("Is not a Perfect Number : " . $n."\n");
    }
  }
  
  
}
function main() {
  $obj = new Number();
  $obj->perfect_number(6);
  $obj->perfect_number(24);
  $obj->perfect_number(8128);
  $obj->perfect_number(33550336);
}
main();

Output

Is Perfect Number : 6
Is not a Perfect Number : 24
Is Perfect Number : 8128
Is Perfect Number : 33550336

Explanation of Resultant Output

The main function calls the perfect_number function with several test cases (6, 24, 8128, 33550336) to check whether they are perfect numbers or not. The output of the program indicates whether each number is a perfect number or not.

  • For the number 6, the function returns Is Perfect Number : 6 as explained in the example above.
  • For the number 24, the function returns Is not a Perfect Number : 24. The divisors of 24 are 1, 2, 3, 4, 6, 8, and 12, and their sum is 36, which is not equal to 24.
  • For the number 8128, the function returns Is Perfect Number : 8128. The divisors of 8128 are 1, 2, 4, 8, 16, 32, 127, 254, 508, 1016, 2032, and 4064, and their sum is 8128, which is equal to the number itself.
  • For the number 33550336, the function returns Is Perfect Number : 33550336. The divisors of 33550336 are 1, 2, 4, 8, 16, 32, 64, 131, 262, 524, 1048, 2096, 4192, 8384, 16127, 32254, 64508, 129016, 258032, 516064, 1032128, 2064256, and 4128512, and their sum is 33550336, which is equal to the number itself.

Time Complexity

Let's analyze the time complexity of the code. For each number n, the loop runs from n/2 down to 1, checking if each number is a divisor of n. Therefore, the time complexity of the is_perfect_no function is O(n/2) or simply O(n), where n is the given number.

In the worst case, the loop will iterate through half of the given number's value, which is why the time complexity is linear in terms of the input size.

Finally

In this article, we discussed the problem of determining whether a given number is a perfect number or not. We provided a step-by-step explanation, suitable examples, pseudocode, and the algorithm's time complexity. The provided C code correctly identifies perfect numbers and outputs the result accordingly.

Comment

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.

New Comment