From ff610e6e3ee6d093af119add60997975a7158389 Mon Sep 17 00:00:00 2001 From: Akshay Dubey Date: Tue, 15 Nov 2022 09:09:20 +0530 Subject: [PATCH 1/5] feat: Add liouville lambda function --- maths/liouville_lambda.py | 51 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 maths/liouville_lambda.py diff --git a/maths/liouville_lambda.py b/maths/liouville_lambda.py new file mode 100644 index 000000000000..8976ea1bc16e --- /dev/null +++ b/maths/liouville_lambda.py @@ -0,0 +1,51 @@ +""" +== Liouville Lambda Function == +The Liouville Lambda function, denoted by λ(n) +and λ(n) is 1 if n is the product of an even number of prime numbers, +and -1 if it is the product of an odd number of primes. + +https://en.wikipedia.org/wiki/Liouville_function +""" + +# Author : Akshay Dubey (https://github.com/itsAkshayDubey) +from maths.prime_factors import prime_factors + + +def liouville_lambda(number: int) -> int: + """ + # doctest: +NORMALIZE_WHITESPACE + This functions takes an integer number as input. + returns 1 if n has even number of prime factors and -1 otherwise. + >>> liouville_lambda(10) + 1 + >>> liouville_lambda(11) + -1 + >>> liouville_lambda(0) + Traceback (most recent call last): + ... + ValueError: Input must be non-zero + >>> liouville_lambda(-1) + Traceback (most recent call last): + ... + ValueError: Input must be positive + >>> liouville_lambda(11.0) + Traceback (most recent call last): + ... + TypeError: Input value of [number=11.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: + raise ValueError("Input must be positive") + if number == 0: + raise ValueError("Input must be non-zero") + if len(prime_factors(number)) % 2 == 0: + return 1 + else: + return -1 + + +if __name__ == "__main__": + import doctest + + doctest.testmod() From 0788859791fb276a54fe86c26a186c5869164738 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 15 Nov 2022 13:33:19 +0000 Subject: [PATCH 2/5] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- maths/liouville_lambda.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/maths/liouville_lambda.py b/maths/liouville_lambda.py index 8976ea1bc16e..e7eaf1c69168 100644 --- a/maths/liouville_lambda.py +++ b/maths/liouville_lambda.py @@ -1,8 +1,8 @@ """ == Liouville Lambda Function == The Liouville Lambda function, denoted by λ(n) -and λ(n) is 1 if n is the product of an even number of prime numbers, -and -1 if it is the product of an odd number of primes. +and λ(n) is 1 if n is the product of an even number of prime numbers, +and -1 if it is the product of an odd number of primes. https://en.wikipedia.org/wiki/Liouville_function """ From f9df30f79a59beb2fdc269ad78595d3bd9e029b7 Mon Sep 17 00:00:00 2001 From: Akshay Dubey Date: Tue, 15 Nov 2022 22:41:29 +0530 Subject: [PATCH 3/5] refactor: Refactor if-else block --- maths/liouville_lambda.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/maths/liouville_lambda.py b/maths/liouville_lambda.py index e7eaf1c69168..a180056d4f63 100644 --- a/maths/liouville_lambda.py +++ b/maths/liouville_lambda.py @@ -39,10 +39,7 @@ def liouville_lambda(number: int) -> int: raise ValueError("Input must be positive") if number == 0: raise ValueError("Input must be non-zero") - if len(prime_factors(number)) % 2 == 0: - return 1 - else: - return -1 + return -1 if len(prime_factors(number)) % 2 else 1 if __name__ == "__main__": From d594f79d3908c9baca0c57b58ade20badc935689 Mon Sep 17 00:00:00 2001 From: Akshay Dubey Date: Tue, 15 Nov 2022 22:44:01 +0530 Subject: [PATCH 4/5] refactor: Refactor error handling for -ve numbers --- maths/liouville_lambda.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/maths/liouville_lambda.py b/maths/liouville_lambda.py index a180056d4f63..22589d2b8ab1 100644 --- a/maths/liouville_lambda.py +++ b/maths/liouville_lambda.py @@ -23,11 +23,11 @@ def liouville_lambda(number: int) -> int: >>> liouville_lambda(0) Traceback (most recent call last): ... - ValueError: Input must be non-zero + ValueError: Input must be a positive integer >>> liouville_lambda(-1) Traceback (most recent call last): ... - ValueError: Input must be positive + ValueError: Input must be a positive integer >>> liouville_lambda(11.0) Traceback (most recent call last): ... @@ -35,10 +35,8 @@ def liouville_lambda(number: int) -> int: """ if not isinstance(number, int): raise TypeError(f"Input value of [number={number}] must be an integer") - if number < 0: - raise ValueError("Input must be positive") - if number == 0: - raise ValueError("Input must be non-zero") + if number < 1: + raise ValueError("Input must be a positive integer") return -1 if len(prime_factors(number)) % 2 else 1 From 8e110710d29e7d88478f349cbdfb96f3ef8c5870 Mon Sep 17 00:00:00 2001 From: Akshay Dubey Date: Tue, 15 Nov 2022 22:50:19 +0530 Subject: [PATCH 5/5] refactor: Remove # doctest: +NORMALIZE_WHITESPACE --- maths/liouville_lambda.py | 1 - 1 file changed, 1 deletion(-) diff --git a/maths/liouville_lambda.py b/maths/liouville_lambda.py index 22589d2b8ab1..5993efa42d66 100644 --- a/maths/liouville_lambda.py +++ b/maths/liouville_lambda.py @@ -13,7 +13,6 @@ def liouville_lambda(number: int) -> int: """ - # doctest: +NORMALIZE_WHITESPACE This functions takes an integer number as input. returns 1 if n has even number of prime factors and -1 otherwise. >>> liouville_lambda(10)