From b4c3b97486a95742b5f2cdff72689ba9ef428ccf Mon Sep 17 00:00:00 2001 From: und1n3 Date: Mon, 4 Oct 2021 15:13:22 +0200 Subject: [PATCH 1/7] Added algorithm for creating Hamming numbers series in Python --- maths/series/hamming_numbers.py | 60 +++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 maths/series/hamming_numbers.py diff --git a/maths/series/hamming_numbers.py b/maths/series/hamming_numbers.py new file mode 100644 index 000000000000..baddcd49959a --- /dev/null +++ b/maths/series/hamming_numbers.py @@ -0,0 +1,60 @@ +""" +Run the doctests with the following command: +python3 -m doctest -v hamming_numbers.py +or +python -m doctest -v hamming_numbers.py +For manual testing run: +python3 hamming_numbers.py + +""" + + +def hamming(n_element: int) -> list: + """ + A Hamming number is a positive integer of the form 2^i*3^j*5^k, for some + non-negative integers i, j, and k. + More info at: https://en.wikipedia.org/wiki/Regular_number . + + This function creates an ordered list of n length as requested, and afterwards + returns the last value of the list. It must be given a positive integer. + + :param n_element: The number of elements on the list + :return: The nth element of the list + + Examples: + >>> hamming(5) + [1, 2, 3, 4, 5] + >>> hamming(10) + [1, 2, 3, 4, 5, 6, 8, 9, 10, 12] + >>> hamming(15) + [1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24] + """ + n_element = int(n_element) + if n_element < 1: + my_error= ValueError("a should be a positive number") + raise my_error + + hamming_list = [1] + i, j, k = (0, 0, 0) + index = 1 + while index < n_element: + while hamming_list[i] * 2 <= hamming_list[-1]: + i += 1 + while hamming_list[j] * 3 <= hamming_list[-1]: + j += 1 + while hamming_list[k] * 5 <= hamming_list[-1]: + k += 1 + hamming_list.append( + min(hamming_list[i] * 2, hamming_list[j] * 3, hamming_list[k] * 5) + ) + index += 1 + return hamming_list + + +if __name__ == "__main__": + n = input("Enter the last number (nth term) of the Hamming Number Series: ") + print("Formula of Hamming Number Series => 2^i * 3^j * 5^k") + hamming_numbers = hamming(n) + print("-----------------------------------------------------") + print("The list with nth numbers is: {}".format(hamming_numbers)) + print("-----------------------------------------------------") From d7bb3655ba8c0395efc488f77aaec96a44a7585c Mon Sep 17 00:00:00 2001 From: und1n3 Date: Mon, 4 Oct 2021 15:16:44 +0200 Subject: [PATCH 2/7] Changed to f-string format. --- maths/series/hamming_numbers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maths/series/hamming_numbers.py b/maths/series/hamming_numbers.py index baddcd49959a..a385b3b8635b 100644 --- a/maths/series/hamming_numbers.py +++ b/maths/series/hamming_numbers.py @@ -56,5 +56,5 @@ def hamming(n_element: int) -> list: print("Formula of Hamming Number Series => 2^i * 3^j * 5^k") hamming_numbers = hamming(n) print("-----------------------------------------------------") - print("The list with nth numbers is: {}".format(hamming_numbers)) + print(f"The list with nth numbers is: {hamming_numbers}") print("-----------------------------------------------------") From df11ba1b4a41e4f313c4e2487e94561391984f1d Mon Sep 17 00:00:00 2001 From: und1n3 Date: Tue, 26 Oct 2021 23:15:15 +0200 Subject: [PATCH 3/7] Added modifications --- maths/series/{hamming_numbers.py => hamming.py} | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) rename maths/series/{hamming_numbers.py => hamming.py} (76%) diff --git a/maths/series/hamming_numbers.py b/maths/series/hamming.py similarity index 76% rename from maths/series/hamming_numbers.py rename to maths/series/hamming.py index a385b3b8635b..3bd52da65079 100644 --- a/maths/series/hamming_numbers.py +++ b/maths/series/hamming.py @@ -1,27 +1,18 @@ """ -Run the doctests with the following command: -python3 -m doctest -v hamming_numbers.py -or -python -m doctest -v hamming_numbers.py -For manual testing run: -python3 hamming_numbers.py +A Hamming number is a positive integer of the form 2^i*3^j*5^k, for some +non-negative integers i, j, and k. They often refer to a regular number. +More info at: https://en.wikipedia.org/wiki/Regular_number . """ - def hamming(n_element: int) -> list: """ - A Hamming number is a positive integer of the form 2^i*3^j*5^k, for some - non-negative integers i, j, and k. - More info at: https://en.wikipedia.org/wiki/Regular_number . - This function creates an ordered list of n length as requested, and afterwards returns the last value of the list. It must be given a positive integer. :param n_element: The number of elements on the list :return: The nth element of the list - Examples: >>> hamming(5) [1, 2, 3, 4, 5] >>> hamming(10) @@ -31,7 +22,7 @@ def hamming(n_element: int) -> list: """ n_element = int(n_element) if n_element < 1: - my_error= ValueError("a should be a positive number") + my_error = ValueError("a should be a positive number") raise my_error hamming_list = [1] From 64faa42f12f5014780edea8dc1aa581804f535a2 Mon Sep 17 00:00:00 2001 From: John Law Date: Sun, 17 Jul 2022 05:46:52 +0800 Subject: [PATCH 4/7] Update and rename hamming.py to hamming_numbers.py --- maths/series/{hamming.py => hamming_numbers.py} | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) rename maths/series/{hamming.py => hamming_numbers.py} (91%) diff --git a/maths/series/hamming.py b/maths/series/hamming_numbers.py similarity index 91% rename from maths/series/hamming.py rename to maths/series/hamming_numbers.py index 3bd52da65079..d0632221577e 100644 --- a/maths/series/hamming.py +++ b/maths/series/hamming_numbers.py @@ -1,8 +1,7 @@ """ A Hamming number is a positive integer of the form 2^i*3^j*5^k, for some -non-negative integers i, j, and k. They often refer to a regular number. -More info at: https://en.wikipedia.org/wiki/Regular_number . - +non-negative integers i, j, and k. They are often referred to as regular numbers. +More info at: https://en.wikipedia.org/wiki/Regular_number. """ def hamming(n_element: int) -> list: From 8554af1d6606eca5932bda313ddad984041deac7 Mon Sep 17 00:00:00 2001 From: John Law Date: Sun, 17 Jul 2022 05:48:32 +0800 Subject: [PATCH 5/7] Update hamming_numbers.py --- maths/series/hamming_numbers.py | 1 + 1 file changed, 1 insertion(+) diff --git a/maths/series/hamming_numbers.py b/maths/series/hamming_numbers.py index d0632221577e..c6b398b1c2c7 100644 --- a/maths/series/hamming_numbers.py +++ b/maths/series/hamming_numbers.py @@ -4,6 +4,7 @@ More info at: https://en.wikipedia.org/wiki/Regular_number. """ + def hamming(n_element: int) -> list: """ This function creates an ordered list of n length as requested, and afterwards From efa3df0d606e0fe79ac042cbf8cda591cb11a581 Mon Sep 17 00:00:00 2001 From: John Law Date: Sun, 17 Jul 2022 05:50:57 +0800 Subject: [PATCH 6/7] Update hamming_numbers.py --- maths/series/hamming_numbers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maths/series/hamming_numbers.py b/maths/series/hamming_numbers.py index c6b398b1c2c7..4575119c8a95 100644 --- a/maths/series/hamming_numbers.py +++ b/maths/series/hamming_numbers.py @@ -45,7 +45,7 @@ def hamming(n_element: int) -> list: if __name__ == "__main__": n = input("Enter the last number (nth term) of the Hamming Number Series: ") print("Formula of Hamming Number Series => 2^i * 3^j * 5^k") - hamming_numbers = hamming(n) + hamming_numbers = hamming(int(n)) print("-----------------------------------------------------") print(f"The list with nth numbers is: {hamming_numbers}") print("-----------------------------------------------------") From 54b06a57257abdc98f5d6b4898f741119f4c390f Mon Sep 17 00:00:00 2001 From: John Law Date: Sun, 17 Jul 2022 05:54:57 +0800 Subject: [PATCH 7/7] Rename maths/series/hamming_numbers.py to maths/hamming_numbers.py --- maths/{series => }/hamming_numbers.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename maths/{series => }/hamming_numbers.py (100%) diff --git a/maths/series/hamming_numbers.py b/maths/hamming_numbers.py similarity index 100% rename from maths/series/hamming_numbers.py rename to maths/hamming_numbers.py