11"""
2- == Perfect Number ==
3- In number theory, a perfect number is a positive integer that is equal to the sum of
4- its positive divisors, excluding the number itself.
5- For example: 6 ==> divisors[1, 2, 3, 6]
6- Excluding 6, the sum(divisors) is 1 + 2 + 3 = 6
7- So, 6 is a Perfect Number
8-
9- Other examples of Perfect Numbers: 28, 486, ...
10-
11- https://en.wikipedia.org/wiki/Perfect_number
12- """
13-
14-
15- def perfect (number : int ) -> bool :
16- """
17- Check if a number is a perfect number.
18-
19- A perfect number is a positive integer that is equal to the sum of its proper
20- divisors (excluding itself).
21-
22- Args:
23- number: The number to be checked.
24-
25- Returns:
26- True if the number is a perfect number, False otherwise.
27-
28- Start from 1 because dividing by 0 will raise ZeroDivisionError.
29- A number at most can be divisible by the half of the number except the number
30- itself. For example, 6 is at most can be divisible by 3 except by 6 itself.
31-
32- Examples:
33- >>> perfect(27)
34- False
35- >>> perfect(28)
36- True
37- >>> perfect(29)
38- False
39- >>> perfect(6)
40- True
41- >>> perfect(12)
42- False
43- >>> perfect(496)
44- True
45- >>> perfect(8128)
46- True
47- >>> perfect(0)
48- False
49- >>> perfect(-1)
50- False
51- >>> perfect(12.34)
52- Traceback (most recent call last):
53- ...
54- ValueError: number must be an integer
55- >>> perfect("Hello")
56- Traceback (most recent call last):
57- ...
58- ValueError: number must be an integer
59- """
60- if not isinstance (number , int ):
61- raise ValueError ("number must be an integer" )
62- if number <= 0 :
63- return False
64- return sum (i for i in range (1 , number // 2 + 1 ) if number % i == 0 ) == number
65-
66-
67- if __name__ == "__main__" :
68- from doctest import testmod
69-
70- testmod ()
71- print ("Program to check whether a number is a Perfect number or not..." )
72- try :
73- number = int (input ("Enter a positive integer: " ).strip ())
74- except ValueError :
75- msg = "number must be an integer"
76- print (msg )
77- raise ValueError (msg )
78-
79- print (f"{ number } is { '' if perfect (number ) else 'not ' } a Perfect Number." )
2+ Determine if a number is a perfect number.
3+ A perfect number is a positive integer that is equal to the sum of its
4+ proper positive divisors.
5+
6+ More info: https://en.wikipedia.org/wiki/Perfect_number
7+
8+ >>> is_perfect(6)
9+ True
10+ >>> is_perfect(28)
11+ True
12+ >>> is_perfect(496)
13+ True
14+ >>> is_perfect(10)
15+ False
16+ >>> is_perfect(1)
17+ False
18+ >>> is_perfect(0)
19+ False
20+ >>> is_perfect(-6)
21+ False
22+ """
0 commit comments