Conversion From Non Perfect Number Into Perfect Number.

Introduction

As we studied in our early school days, a perfect number is a number that is a square of another number. Also, we can define a perfect number as a product of the same number or the product of two equal numbers. For example, 25 is a perfect number because it is the product of two 5s. Perfect numbers are always positive. We have many formulas for perfect numbers, and we have been using these formulas since school.

My goal here is to try to write basic Python code to convert non-perfect numbers into perfect numbers.

How to do it ?

As our basic concept is to apply a while loop to find the nearest perfect number from our number and determine how much we need to add or subtract to reach the perfect number.

In Python

Creation of a Python program to convert a non-perfect number into a perfect number:

To do this, take a number as input and apply the general formula used to check whether it is a perfect square, as learned in school. If our given number is already perfect, we do not need to proceed further. If our given number is not perfect, we initialize before as 0, after as 1, and curr_num as 1.

Now we start a while loop and use the formula again to check if the current number is a perfect square in integer form. If the square of the cube root equals the current number, we do not need to go further in the loop. If not, we compare our given number with curr_num. If our number is less than curr_num, we set before equal to curr_num. If the number is greater than curr_num, we set after equal to the current number. In each iteration, our curr_num increases by 1. The rest of the code is given below.

n = int(input('Enter an integer'))
root = int(n**0.5)

if root** 2 == n:
    print('Your number is already perfect.')
else:
    before = 0
    after = 1
    curr_num = 1
    while True:
        croot = int(curr_num**0.5)
        if croot** 2 == curr_num:
            if curr_num < n:
                before = curr_num
            else:
                after = curr_num
        #print(curr_num,before,after)
        if after != 1:
            if n - before < after - n:
                print(f'perfect number around{n} are {before} and {after}')
                print(f'your nearest perfect number around {n} is {before}')
                print(f'we have to subtract {n - before} to make {n} perfect number.')
            else:
                print(f'perfect number around {n}  are {before} and { after }')
                print(f'your nearest perfect number around {n} is { after}')
                print(f'we have to add {after - n} to make {n} perfect number.')
                break
        curr_num += 1

Comments