feat: add get_primes_in_range & get_prime_factorization to pre-algebra notebook

This commit is contained in:
rzmk 2023-10-11 08:20:44 -04:00
parent 74397be1ae
commit 466af4ca4c
No known key found for this signature in database

View file

@ -38,7 +38,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 1, "execution_count": 44,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
@ -85,7 +85,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 2, "execution_count": 45,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
@ -130,7 +130,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 3, "execution_count": 46,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
@ -158,7 +158,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 4, "execution_count": 47,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
@ -186,7 +186,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 1, "execution_count": 48,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
@ -224,7 +224,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 2, "execution_count": 49,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
@ -260,7 +260,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 3, "execution_count": 50,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
@ -279,6 +279,99 @@
"assert is_composite(59) == False\n", "assert is_composite(59) == False\n",
"assert is_composite(72) == True" "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": { "metadata": {