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
- Start the
is_perfect_no
function with an inputn
representing the number to be checked. - If
n
is less than 0, returnFalse
as negative numbers cannot be perfect numbers. - Initialize a variable
sum
to 0 to keep track of the sum of divisors. - Use a loop to iterate from
n/2
down to 1 (inclusive) since any divisor greater thann/2
cannot be a proper divisor. - Check if
n
is divisible by the current numberi
. If it is divisible, addi
to thesum
. - After the loop, check if the
sum
is equal ton
. If they are equal, returnTrue
, indicating that the number is perfect; otherwise, returnFalse
.

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.
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