maths.perfect_number

== Perfect Number == In number theory, a perfect number is a positive integer that is equal to the sum of its positive divisors, excluding the number itself.

For example: 6 ==> divisors[1, 2, 3, 6]

Excluding 6, the sum(divisors) is 1 + 2 + 3 = 6 So, 6 is a Perfect Number

The first few perfect numbers are: 6, 28, 496, 8128, 33550336, …

https://en.wikipedia.org/wiki/Perfect_number https://oeis.org/A000396

Attributes

user_input

Functions

find_perfect_numbers(→ list[int])

Find all perfect numbers up to a given limit.

get_divisors(→ list[int])

Get all proper divisors of a number (excluding the number itself).

perfect(→ bool)

Check if a number is a perfect number.

perfect_optimized(→ bool)

Optimized version of perfect number checker using mathematical properties.

Module Contents

maths.perfect_number.find_perfect_numbers(limit: int) list[int]

Find all perfect numbers up to a given limit.

Args:

limit: The upper bound to search for perfect numbers.

Returns:

List of perfect numbers up to the limit.

Examples:
>>> find_perfect_numbers(10)
[6]
>>> find_perfect_numbers(30)
[6, 28]
>>> find_perfect_numbers(500)
[6, 28, 496]
>>> find_perfect_numbers(0)
[]
>>> find_perfect_numbers(1)
[]
maths.perfect_number.get_divisors(number: int) list[int]

Get all proper divisors of a number (excluding the number itself).

Args:

number: The positive integer to find divisors for.

Returns:

List of proper divisors in ascending order.

Examples:
>>> get_divisors(6)
[1, 2, 3]
>>> get_divisors(28)
[1, 2, 4, 7, 14]
>>> get_divisors(12)
[1, 2, 3, 4, 6]
>>> get_divisors(1)
[]
>>> get_divisors(7)
[1]
maths.perfect_number.perfect(number: int) bool

Check if a number is a perfect number.

A perfect number is a positive integer that is equal to the sum of its proper divisors (positive divisors excluding the number itself).

The algorithm finds all divisors up to number//2 (since no proper divisor can be greater than half the number) and sums them for comparison.

Time Complexity: O(sqrt(n)) with optimized divisor finding Space Complexity: O(1)

Args:

number: The positive integer to be checked.

Returns:

True if the number is a perfect number, False otherwise.

Raises:

ValueError: If number is not an integer.

Examples:

Basic perfect numbers: >>> perfect(6) True >>> perfect(28) True >>> perfect(496) True >>> perfect(8128) True

Large perfect number: >>> perfect(33550336) True

Non-perfect numbers: >>> perfect(12) False >>> perfect(27) False >>> perfect(29) False >>> perfect(100) False

Edge cases: >>> perfect(1) False >>> perfect(2) False >>> perfect(0) False >>> perfect(-1) False >>> perfect(-6) False

Numbers close to perfect numbers: >>> perfect(5) False >>> perfect(7) False >>> perfect(27) False >>> perfect(29) False >>> perfect(495) False >>> perfect(497) False >>> perfect(33550335) False >>> perfect(33550337) False

Type validation: >>> perfect(12.34) Traceback (most recent call last): … ValueError: number must be an integer >>> perfect(“123”) Traceback (most recent call last): … ValueError: number must be an integer >>> perfect(“Hello”) Traceback (most recent call last): … ValueError: number must be an integer >>> perfect([6]) Traceback (most recent call last): … ValueError: number must be an integer >>> perfect(None) Traceback (most recent call last): … ValueError: number must be an integer

Testing divisor sum calculation for known cases: >>> # For 6: divisors are 1, 2, 3 -> sum = 6 >>> sum(i for i in range(1, 6//2 + 1) if 6 % i == 0) == 6 True >>> # For 28: divisors are 1, 2, 4, 7, 14 -> sum = 28 >>> sum(i for i in range(1, 28//2 + 1) if 28 % i == 0) == 28 True >>> # For 12: divisors are 1, 2, 3, 4, 6 -> sum = 16 ≠ 12 >>> sum(i for i in range(1, 12//2 + 1) if 12 % i == 0) == 12 False

maths.perfect_number.perfect_optimized(number: int) bool

Optimized version of perfect number checker using mathematical properties.

This version uses the fact that divisors come in pairs (d, n/d) to reduce the search space to sqrt(n).

Time Complexity: O(sqrt(n)) Space Complexity: O(1)

Args:

number: The positive integer to be checked.

Returns:

True if the number is a perfect number, False otherwise.

Examples:
>>> perfect_optimized(6)
True
>>> perfect_optimized(28)
True
>>> perfect_optimized(496)
True
>>> perfect_optimized(12)
False
>>> perfect_optimized(1)
False
>>> perfect_optimized(0)
False
>>> perfect_optimized(-1)
False
maths.perfect_number.user_input