From 466af4ca4c3c25918dca8133001b67135e070562 Mon Sep 17 00:00:00 2001 From: rzmk Date: Wed, 11 Oct 2023 08:20:44 -0400 Subject: [PATCH] feat: add get_primes_in_range & get_prime_factorization to pre-algebra notebook --- notebooks/pre-algebra/unit1.ipynb | 107 ++++++++++++++++++++++++++++-- 1 file changed, 100 insertions(+), 7 deletions(-) diff --git a/notebooks/pre-algebra/unit1.ipynb b/notebooks/pre-algebra/unit1.ipynb index 44cbd8c..0102e19 100644 --- a/notebooks/pre-algebra/unit1.ipynb +++ b/notebooks/pre-algebra/unit1.ipynb @@ -38,7 +38,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 44, "metadata": {}, "outputs": [], "source": [ @@ -85,7 +85,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 45, "metadata": {}, "outputs": [], "source": [ @@ -130,7 +130,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 46, "metadata": {}, "outputs": [], "source": [ @@ -158,7 +158,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 47, "metadata": {}, "outputs": [], "source": [ @@ -186,7 +186,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 48, "metadata": {}, "outputs": [], "source": [ @@ -224,7 +224,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 49, "metadata": {}, "outputs": [], "source": [ @@ -260,7 +260,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 50, "metadata": {}, "outputs": [], "source": [ @@ -279,6 +279,99 @@ "assert is_composite(59) == False\n", "assert is_composite(72) == True" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Write a program that finds all prime numbers of a positive integer `n` in the range `[n, end]`.**\n", + "\n", + "- Assume that `n` and `end` are positive integers greater than or equal to 1.\n", + "\n", + "For example for `n = 1` and `end = 20`, the output of `get_primes_in_range(1, 20)` may be:\n", + "\n", + "```\n", + "{2, 3, 5, 7, 11, 13, 17, 19}\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [], + "source": [ + "def get_primes_in_range(n: int, end: int) -> set:\n", + " primes: set = set()\n", + " for num in range(n, end + 1):\n", + " if is_prime(num):\n", + " primes.add(num)\n", + " return primes\n", + "\n", + "assert get_primes_in_range(1, 1) == set()\n", + "assert get_primes_in_range(1, 2) == {2}\n", + "assert get_primes_in_range(1, 20) == {2, 3, 5, 7, 11, 13, 17, 19}\n", + "assert get_primes_in_range(3, 20) == {3, 5, 7, 11, 13, 17, 19}\n", + "assert get_primes_in_range(1, 50) == {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47}\n", + "assert get_primes_in_range(32, 85) == {37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Write a program that determines the prime factorization of a positive integer `n`.**\n", + "\n", + "For example for `n = 12`, the output of `get_prime_factorization(12)` may be:\n", + "\n", + "```\n", + "{2: 2, 3: 1}\n", + "```\n", + "\n", + "This means the prime factorization of 12 is $2^2 \\times 3^1$, where the keys are the prime factors and the values are the exponents." + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [], + "source": [ + "def get_prime_factorization(n: int) -> dict:\n", + " if n == 1: return {}\n", + " prime_factors: dict = {}\n", + " primes_of_n: set = get_primes_in_range(1, n)\n", + " current_num: int = n\n", + " for prime in primes_of_n:\n", + " while current_num % prime == 0:\n", + " current_num //= prime\n", + " if prime not in prime_factors:\n", + " prime_factors[prime] = 1\n", + " else:\n", + " prime_factors[prime] += 1\n", + " if current_num in primes_of_n:\n", + " if current_num not in prime_factors:\n", + " prime_factors[current_num] = 1\n", + " else:\n", + " prime_factors[current_num] += 1\n", + " break\n", + " elif current_num == 1:\n", + " break\n", + " return prime_factors\n", + "\n", + "assert get_prime_factorization(1) == {}\n", + "assert get_prime_factorization(2) == {2: 1}\n", + "assert get_prime_factorization(3) == {3: 1}\n", + "assert get_prime_factorization(4) == {2: 2}\n", + "assert get_prime_factorization(5) == {5: 1}\n", + "assert get_prime_factorization(6) == {2: 1, 3: 1}\n", + "assert get_prime_factorization(10) == {2: 1, 5: 1}\n", + "assert get_prime_factorization(12) == {2: 2, 3: 1}\n", + "assert get_prime_factorization(13) == {13: 1}\n", + "assert get_prime_factorization(20) == {2: 2, 5: 1}\n", + "assert get_prime_factorization(75) == {3: 1, 5: 2}\n", + "assert get_prime_factorization(750) == {2: 1, 3: 1, 5: 3}" + ] } ], "metadata": {