Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
Python Program to Check if a Number is a Perfect Number
A Perfect Number is a positive integer that equals the sum of its positive divisors, excluding the number itself. For example, 6 is a perfect number because its divisors (1, 2, 3) sum to 6. The first few perfect numbers are 6, 28, 496, and 8128.
Basic Method to Check Perfect Number
We can iterate through all numbers from 1 to n-1 and check if they divide n evenly ?
n = 6
my_sum = 0
for i in range(1, n):
if n % i == 0:
my_sum = my_sum + i
if my_sum == n:
print("The number is a perfect number")
else:
print("The number is not a perfect number")
The number is a perfect number
Testing with Different Numbers
Let's test our logic with both perfect and non-perfect numbers ?
def is_perfect_number(n):
if n <= 1:
return False
divisor_sum = 0
for i in range(1, n):
if n % i == 0:
divisor_sum += i
return divisor_sum == n
# Test with different numbers
test_numbers = [6, 28, 12, 496, 8]
for num in test_numbers:
if is_perfect_number(num):
print(f"{num} is a perfect number")
else:
print(f"{num} is not a perfect number")
6 is a perfect number 28 is a perfect number 12 is not a perfect number 496 is a perfect number 8 is not a perfect number
Optimized Method
We can optimize by checking divisors only up to the square root of n ?
import math
def is_perfect_optimized(n):
if n <= 1:
return False
divisor_sum = 1 # 1 is always a divisor
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
divisor_sum += i
# Add the corresponding divisor if it's different
if i != n // i:
divisor_sum += n // i
return divisor_sum == n
# Test the optimized function
numbers = [6, 28, 100, 496]
for num in numbers:
result = is_perfect_optimized(num)
print(f"{num}: {'Perfect' if result else 'Not Perfect'}")
6: Perfect 28: Perfect 100: Not Perfect 496: Perfect
How It Works
We iterate through potential divisors from 1 to n-1
For each number that divides n evenly (remainder is 0), we add it to our sum
If the final sum equals the original number, it's a perfect number
The optimized version reduces iterations by checking only up to ?n
Conclusion
Perfect numbers are rare mathematical curiosities. Use the basic method for understanding the concept, and the optimized version for better performance with larger numbers.
