From bdd2452b6332eda4e53d1689a2d135c04d5aace9 Mon Sep 17 00:00:00 2001 From: Akshay Dubey Date: Thu, 10 Nov 2022 00:00:07 +0530 Subject: [PATCH 1/2] feat: Add pronic number implementation --- maths/pronic_number.py | 53 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 maths/pronic_number.py diff --git a/maths/pronic_number.py b/maths/pronic_number.py new file mode 100644 index 000000000000..fff82225c2a5 --- /dev/null +++ b/maths/pronic_number.py @@ -0,0 +1,53 @@ +""" +== Pronic Number == +A number n is said to be a Proic number if +there exists an integer m such that n = m * (m + 1) + +Examples of Proic Numbers: 0, 2, 6, 12, 20, 30, 42, 56, 72, 90, 110 ... +https://en.wikipedia.org/wiki/Pronic_number +""" + +# Author : Akshay Dubey (https://github.com/itsAkshayDubey) + + +def is_pronic(number: int) -> bool: + """ + # doctest: +NORMALIZE_WHITESPACE + This functions takes an integer number as input. + returns True if the number is pronic. + >>> is_pronic(-1) + False + >>> is_pronic(0) + True + >>> is_pronic(2) + True + >>> is_pronic(5) + False + >>> is_pronic(6) + True + >>> is_pronic(8) + False + >>> is_pronic(30) + True + >>> is_pronic(32) + False + >>> is_pronic(2147441940) + True + >>> is_pronic(9223372033963249500) + True + >>> is_pronic(6.0) + Traceback (most recent call last): + ... + TypeError: Input value of [number=6.0] must be an integer + """ + if not isinstance(number, int): + raise TypeError(f"Input value of [number={number}] must be an integer") + if number < 0 or number % 2 == 1: + return False + number_sqrt = int(number**0.5) + return number == number_sqrt*(number_sqrt+1) + +if __name__ == "__main__": + import doctest + + doctest.testmod() \ No newline at end of file From 18b9bfae62225ea356cfbfe1d1902b285385110f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 9 Nov 2022 18:32:05 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- maths/pronic_number.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/maths/pronic_number.py b/maths/pronic_number.py index fff82225c2a5..8b554dbbd602 100644 --- a/maths/pronic_number.py +++ b/maths/pronic_number.py @@ -45,9 +45,10 @@ def is_pronic(number: int) -> bool: if number < 0 or number % 2 == 1: return False number_sqrt = int(number**0.5) - return number == number_sqrt*(number_sqrt+1) + return number == number_sqrt * (number_sqrt + 1) + if __name__ == "__main__": import doctest - doctest.testmod() \ No newline at end of file + doctest.testmod()