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.

You might also like: