From fb83b131b2e431e8ea4db11f26156d260ccd7d7c Mon Sep 17 00:00:00 2001 From: Arun Kishore Voleti <49097688+ArunKishoreVoleti@users.noreply.github.com> Date: Thu, 16 Oct 2025 15:41:03 +0530 Subject: [PATCH 1/7] Add function to check deficient numbers Introduces is_deficient_number to determine if a number is deficient by comparing the sum of its proper divisors to the number itself. Includes input validation and doctests for correctness. --- maths/special_numbers/deficient_numbers.py | 52 ++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 maths/special_numbers/deficient_numbers.py diff --git a/maths/special_numbers/deficient_numbers.py b/maths/special_numbers/deficient_numbers.py new file mode 100644 index 000000000000..1dc7d68d5d27 --- /dev/null +++ b/maths/special_numbers/deficient_numbers.py @@ -0,0 +1,52 @@ +""" +A number n is said to be a Deficient number if +the sum of its proper divisors is less than the number itself. + +Examples of Deficient Numbers: 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13, ... +""" + +def is_deficient_number(number: int) -> bool: + """ + This function takes an integer number as input. + Returns True if the number is a deficient number. + + >>> is_deficient_number(-1) + False + >>> is_deficient_number(0) + False + >>> is_deficient_number(1) + True + >>> is_deficient_number(2) + True + >>> is_deficient_number(6) + False + >>> is_deficient_number(12) + False + >>> is_deficient_number(7) + True + >>> is_deficient_number(28) + False + >>> is_deficient_number(15) + True + >>> is_deficient_number(8.0) + Traceback (most recent call last): + ... + TypeError: Input value of [number=8.0] must be an integer + """ + if not isinstance(number, int): + msg = f"Input value of [number={number}] must be an integer" + raise TypeError(msg) + if number < 1: + return False + + divisor_sum = 1 # 1 is always a proper divisor + for i in range(2, int(number ** 0.5) + 1): + if number % i == 0: + divisor_sum += i + if i != number // i: + divisor_sum += number // i + return divisor_sum < number + +if __name__ == "__main__": + import doctest + doctest.testmod() From f93083762386734f184978c0d31718f34f4befc8 Mon Sep 17 00:00:00 2001 From: ArunKishoreVoleti Date: Thu, 16 Oct 2025 10:11:26 +0000 Subject: [PATCH 2/7] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 0f9859577493..8a79bef01d63 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -777,6 +777,7 @@ * [Bell Numbers](maths/special_numbers/bell_numbers.py) * [Carmichael Number](maths/special_numbers/carmichael_number.py) * [Catalan Number](maths/special_numbers/catalan_number.py) + * [Deficient Numbers](maths/special_numbers/deficient_numbers.py) * [Hamming Numbers](maths/special_numbers/hamming_numbers.py) * [Happy Number](maths/special_numbers/happy_number.py) * [Harshad Numbers](maths/special_numbers/harshad_numbers.py) From 0c51c32c7a4acb6b5c486b4cbad9213aab33fe74 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 16 Oct 2025 10:12:09 +0000 Subject: [PATCH 3/7] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- maths/special_numbers/deficient_numbers.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/maths/special_numbers/deficient_numbers.py b/maths/special_numbers/deficient_numbers.py index 1dc7d68d5d27..69f54c3acd5d 100644 --- a/maths/special_numbers/deficient_numbers.py +++ b/maths/special_numbers/deficient_numbers.py @@ -5,6 +5,7 @@ Examples of Deficient Numbers: 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13, ... """ + def is_deficient_number(number: int) -> bool: """ This function takes an integer number as input. @@ -40,13 +41,15 @@ def is_deficient_number(number: int) -> bool: return False divisor_sum = 1 # 1 is always a proper divisor - for i in range(2, int(number ** 0.5) + 1): + for i in range(2, int(number**0.5) + 1): if number % i == 0: divisor_sum += i if i != number // i: divisor_sum += number // i return divisor_sum < number + if __name__ == "__main__": import doctest + doctest.testmod() From 4be218d73a81a670fd9eb707d0f8f0e6d0b20511 Mon Sep 17 00:00:00 2001 From: Arun Kishore Voleti <49097688+ArunKishoreVoleti@users.noreply.github.com> Date: Thu, 16 Oct 2025 18:28:39 +0530 Subject: [PATCH 4/7] Update deficient_numbers.py --- maths/special_numbers/deficient_numbers.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/maths/special_numbers/deficient_numbers.py b/maths/special_numbers/deficient_numbers.py index 69f54c3acd5d..47f923fef6a3 100644 --- a/maths/special_numbers/deficient_numbers.py +++ b/maths/special_numbers/deficient_numbers.py @@ -5,7 +5,6 @@ Examples of Deficient Numbers: 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13, ... """ - def is_deficient_number(number: int) -> bool: """ This function takes an integer number as input. @@ -34,13 +33,14 @@ def is_deficient_number(number: int) -> bool: ... TypeError: Input value of [number=8.0] must be an integer """ + if not isinstance(number, int): msg = f"Input value of [number={number}] must be an integer" raise TypeError(msg) if number < 1: return False - divisor_sum = 1 # 1 is always a proper divisor + divisor_sum = 1 for i in range(2, int(number**0.5) + 1): if number % i == 0: divisor_sum += i @@ -48,8 +48,6 @@ def is_deficient_number(number: int) -> bool: divisor_sum += number // i return divisor_sum < number - if __name__ == "__main__": import doctest - doctest.testmod() From d6f90b5160334d5d015c369c99cd1d23867e3fd5 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 16 Oct 2025 12:59:51 +0000 Subject: [PATCH 5/7] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- maths/special_numbers/deficient_numbers.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/maths/special_numbers/deficient_numbers.py b/maths/special_numbers/deficient_numbers.py index 47f923fef6a3..71c59d582c47 100644 --- a/maths/special_numbers/deficient_numbers.py +++ b/maths/special_numbers/deficient_numbers.py @@ -5,6 +5,7 @@ Examples of Deficient Numbers: 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13, ... """ + def is_deficient_number(number: int) -> bool: """ This function takes an integer number as input. @@ -48,6 +49,8 @@ def is_deficient_number(number: int) -> bool: divisor_sum += number // i return divisor_sum < number + if __name__ == "__main__": import doctest + doctest.testmod() From 20875e901e7a2a62e3e0b742c8150cfe1c2fdbf5 Mon Sep 17 00:00:00 2001 From: Arun Kishore Voleti <49097688+ArunKishoreVoleti@users.noreply.github.com> Date: Thu, 16 Oct 2025 18:54:10 +0530 Subject: [PATCH 6/7] Update deficient_numbers.py Fixed code issue --- maths/special_numbers/deficient_numbers.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/maths/special_numbers/deficient_numbers.py b/maths/special_numbers/deficient_numbers.py index 47f923fef6a3..e82021946d5c 100644 --- a/maths/special_numbers/deficient_numbers.py +++ b/maths/special_numbers/deficient_numbers.py @@ -39,6 +39,8 @@ def is_deficient_number(number: int) -> bool: raise TypeError(msg) if number < 1: return False + if number == 1: + return True divisor_sum = 1 for i in range(2, int(number**0.5) + 1): @@ -50,4 +52,4 @@ def is_deficient_number(number: int) -> bool: if __name__ == "__main__": import doctest - doctest.testmod() + doctest.testmod() \ No newline at end of file From 46f0df352528ed78efa4f9d898703735153c65dd Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 16 Oct 2025 13:26:34 +0000 Subject: [PATCH 7/7] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- maths/special_numbers/deficient_numbers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maths/special_numbers/deficient_numbers.py b/maths/special_numbers/deficient_numbers.py index 629a0e9f5cf1..fc53fc2de16c 100644 --- a/maths/special_numbers/deficient_numbers.py +++ b/maths/special_numbers/deficient_numbers.py @@ -55,4 +55,4 @@ def is_deficient_number(number: int) -> bool: if __name__ == "__main__": import doctest - doctest.testmod() \ No newline at end of file + doctest.testmod()