# 4 different Python programs to check if a number is a perfect number ## Python program to check if a number is a perfect number or not:

In this post, we will learn how to check if a number is a perfect number or not in Python. I will show you different ways to write this program in Python. The program will take one number as input from the user and print a message if it is a perfect number or not.

But, before I start to write the program, let me quickly show you what is a perfect number and the algorithm to check for perfect numbers.

### What is a perfect number:

A number is called a perfect number if the sum of the divisors of the number is equal to the number itself. For example, 28 is a perfect number, because the sum of its divisors 1, 2, 4, 7, 14 is equal to 28.

``1 + 2 + 4 + 7 + 14 = 28``

So, we have to find all the divisors of a number, find the sum of all divisors and compare it with the original number to check if a number is a perfect number or not.

### Algorithm to check if a number is a perfect number or not:

We can use the below algorithm to check for a perfect number:

• Take the number as input from the user and store it in a variable.
• Initialize one variable as 0 to hold the sum of its divisors.
• Run one loop from 1 to number - 1 and for each value of the loop, check if it is a divisor of the number or not.
• If it is a divisor, add it to the sum variable.
• Once the loop ends, compare the sum variable with the original number. If both are equal, it will be a perfect number. Else, not.

We can also run the loop from 1 to number/2 as no value greater than number/2 can divide the number. It will reduce the loop iterations.

### Method 1: Python program to check for a perfect number:

The below python program checks if a number is a perfect number or not:

``````no = int(input("Enter the number: "))
sum = 0

for i in range(1, no):
if no % i == 0:
sum += i

if sum == no:
print(f'{no} is a perfect number.')
else:
print(f'{no} is not a perfect number.')``````

Here,

• The program asks the user to enter a number. It assigns the number to the no variable.
• The sum variable is used to hold the sum of all divisors. It is initialized as 0.
• The for loop runs from i = 1 to i = no. On each iteration of the loop, it checks if i can divide no or not. If yes, it adds its value to the sum variable.
• Once the for loop ends, it compares the values of sum and no. If both are equal, it will be a perfect number.

If you run this program, it will print output as below:

``````Enter the number: 496
496 is a perfect number.

Enter the number: 8128
8128 is a perfect number.

Enter the number: 8129
8129 is not a perfect number.``````

### Method 2: By iterating from 1 to number/2:

We can also iterate from 1 to number/2. As I explained above, it will reduce the number of steps of the loop.

Let me change the above program:

``````no = int(input("Enter the number: "))
sum = 0

for i in range(1, int(no/2)+1):
if no % i == 0:
sum += i

if sum == no:
print(f'{no} is a perfect number.')
else:
print(f'{no} is not a perfect number.')``````

Since the type of no/2 is float, we have to cast it to an integer. It will run from i = 1 to i = no/2.

If you run this program, it will print similar result.

``````Enter the number: 8128
8128 is a perfect number.``````

### Method 3: By using while loops:

We can also use a while loop to write the same program. It will run from number/2 to 1 and find out the sum of all divisors.

``````no = int(input("Enter the number: "))
sum = 0
i = int(no/2)

while i > 0:
if no % i == 0:
sum += i
i = i - 1

if sum == no:
print(f'{no} is a perfect number.')
else:
print(f'{no} is not a perfect number.')``````
• We initialized a variable i as no/2. The while loop starts at i = no/2.
• On each iteration of the loop, it checks if the number is divisible by the current value of i or not. If yes, it adds that value to the sum variable.
• At the end of each iteration, it decrements the value of i by 1.
• This loop stops when the value of i becomes 0.
• It compares the values of sum and no once the loop ends to find if the given number is a perfect number or not.

It will give similar output.

``````Enter the number: 488
488 is not a perfect number.

Enter the number: 496
496 is a perfect number.``````

### Method 4: By using a separate method:

Let’s use a separate method to write the above program. This method will take one number as its parameter and return one boolean value. It will return True if the number is a perfect number and False if it is not. Based on this value, the program will print if the given number is a perfect number or not.

``````def is_perfect(n):
sum = 0

for i in range(1, int(n/2)+1):
if n % i == 0:
sum += i
return sum == n

no = int(input("Enter the number: "))
if is_perfect(no):
print(f'{no} is a perfect number.')
else:
print(f'{no} is not a perfect number.')``````

Here,

• The is_perfect method checks if a number is a perfect number or not. It takes one number as its parameter and returns one boolean value.
• The if condition checks the return value of this method and prints one message based on that.