added loops

This commit is contained in:
2024-01-29 19:09:42 +01:00
parent 01c9aff07d
commit 39e3c38a94
11 changed files with 230 additions and 0 deletions

0
dataclasses/README.md Normal file
View File

View File

0
loops/README.md Normal file
View File

31
loops/ex01/README.md Normal file
View File

@ -0,0 +1,31 @@
# [Primzahlen](./primes.py)
## `is_prime`
Eine Primzahl ist eine Zahl die nur durch sich selbst und eins teilbar ist. Implementieren Sie die Funktion `is_prime(n: int) -> bool` welche
- `True` wenn `n` größer als 1 ist und eine Primzahl
- sonst `False`
## `next_prime`
Nun schreiben wir eine Funktion `next_prime` die eine Zahl `n` nimmt und uns die nächst größere Primzahl zurückgibt.
- Sie können diese sowohl iterativ also auch rekursiv lösen
- Es müssen keine weiteren Randbedingungen beachtet werden
## `prime_factorize`
Eine beliebiges aber festes $n \in \mathbb{N}_2$ kann entweder eine Primzahl sein oder eine Zahl welche man in ein Produkt aus Primzahlen zerlegen kann. Dieses Verfahren nennt man Primfaktorzerlegen.
Als kleines Beispiel kann man $20$ als Produkt $2 \cdot 2 \cdot 5$ darstellen. Dieses ist vor allem eindeutig und man kann für jeder Zahl ein solches Produkt finden.
Schreiben Sie nun folgende Funktion `prime_factorize(n: int) -> list[int]` welche
- für Zahlen `n < 2` eine leere Liste zurückgibt
- für Zahlen `n` die Prim sind einfach eine Liste mit der Zahl `n` zurückgibt
- sonst für alle weiteren eine Liste mit den Primfaktoren zurückgibt
Tipp: Sie können hierfür die Funktionen `is_prime` und `next_prime` verwenden
## [Solution](./solution/primes.py)

12
loops/ex01/primes.py Normal file
View File

@ -0,0 +1,12 @@
def is_prime(n: int) -> bool:
# TODO: implement
return False
def next_prime(n: int) -> int:
return -1
def prime_factorize(n: int) -> list[int]:
# TODO: implement
return []

View File

@ -0,0 +1,63 @@
# Solution
## `is_prime`
Zunächst überprüfen wir alle Randbedingungen für `n < 2`
```python
if n < 2:
return False
```
wir wissen laut definition dass hier die Funktion zu `False` evaluieren soll.
Jetzt wollen wir durch alle Zahlen bis zu unserer Zahl `n` iterieren und schauen ob sich `n` noch anders teilen lässt
```python
for num in range(2, n):
if n % num == 0:
return False
```
Wenn `n` durch `num` teilbar ist können wir `False` zurückgeben, da `n` nicht nur durch sich selbst teilbar ist.
Jetzt geben wir noch `True` zurück wenn wir durch die For-Schleife iteriert sind und haben die Funktion.
```python
def is_prime(n: int) -> bool:
if n < 2:
return False
for num in range(2, n):
if n % num == 0:
return False
return True
```
## `next_prime`
Wir inkrementieren solange `n` bis `is_prime` erfüllt ist und geben diesen Wert dann zurück.
Iterativ:
- wir speichern uns `n` zwischen und inkrementieren initial
- nun testen wir in einer `While`-Schleife `num` bis diese eine Primzahl ist und geben sie zurück
```python
num += 1
while not is_prime(num):
num += 1
return num
```
Rekursiv:
- Unsere Abbruchbedingung ist, dass `n + 1` eine Primzahl ist
- Ansonsten müssen wir rekursiv `n` inkrementieren bis wir eine Zahl erreichen die Prim ist
```python
if is_prime(n + 1):
return n + 1
else:
return next_prime(n + 1)
```

View File

@ -0,0 +1,32 @@
def is_prime(n: int) -> bool:
if n < 2:
return False
for i in range(2, n):
if n % i == 0:
return False
return True
def next_prime(n: int) -> int:
return n + 1 if is_prime(n + 1) else next_prime(n + 1)
def next_prime_iterative(n: int) -> int:
num = n + 1
while not is_prime(num):
num += 1
return num
def prime_factorize(n: int) -> list[int]:
prime_factores: list[int] = []
num = n
prime = 0
while (prime := next_prime(prime)) <= n:
if num % prime == 0:
prime_factores += [prime]
num //= prime
return prime_factores

View File

@ -0,0 +1,46 @@
from primes import is_prime, prime_factorize
from typing import Iterable
PRIMES = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29,
31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
73, 79, 83, 89, 97, 101, 103, 107, 109, 113,
127, 131, 137, 139, 149, 151, 157, 163, 167, 173,
179, 181, 191, 193, 197, 199, 211, 223, 227, 229,
233, 239, 241, 251, 257, 263, 269, 271, 277, 281,
283, 293, 307, 311, 313, 317, 331, 337, 347, 349,
353, 359, 367, 373, 379, 383, 389, 397, 401, 409,
419, 421, 431, 433, 439, 443, 449, 457, 461, 463,
467, 479, 487, 491, 499, 503, 509, 521, 523, 541,
547, 557, 563, 569, 571, 577, 587, 593, 599, 601,
607, 613, 617, 619, 631, 641, 643, 647, 653, 659,
661, 673, 677, 683, 691, 701, 709, 719, 727, 733,
739, 743, 751, 757, 761, 769, 773, 787, 797, 809,
811, 821, 823, 827, 829, 839, 853, 857, 859, 863,
877, 881, 883, 887, 907, 911, 919, 929, 937, 941,
947, 953, 967, 971, 977, 983, 991, 997]
PRIME_FACTORES = [[], [], [2], [3], [2], [5], [2, 3], [7], [2], [3], [2, 5], [11], [2, 3], [13], [2, 7], [3, 5], [2], [17], [2, 3], [19], [2, 5], [3, 7], [2, 11], [23], [2, 3], [5], [2, 13], [3], [2, 7], [29], [2, 3, 5], [31], [2], [3, 11], [2, 17], [5, 7], [2, 3], [37], [2, 19], [3, 13], [2, 5], [41], [2, 3, 7], [43], [2, 11], [3, 5], [2, 23], [47], [2, 3], [7], [2, 5], [3, 17], [2, 13], [53], [2, 3], [5, 11], [2, 7], [3, 19], [2, 29], [59], [2, 3, 5], [61], [2, 31], [3, 7], [2], [5, 13], [2, 3, 11], [67], [2, 17], [3, 23], [2, 5, 7], [71], [2, 3], [73], [2, 37], [3, 5], [2, 19], [7, 11], [2, 3, 13], [79], [2, 5], [3], [2, 41], [83], [2, 3, 7], [5, 17], [2, 43], [3, 29], [2, 11], [89], [2, 3, 5], [7, 13], [2, 23], [3, 31], [2, 47], [5, 19], [2, 3], [97], [2, 7], [3, 11], [2, 5], [101], [2, 3, 17], [103], [2, 13], [3, 5, 7], [2, 53], [107], [2, 3], [109], [2, 5, 11], [3, 37], [2, 7], [113], [2, 3, 19], [5, 23], [2, 29], [3, 13], [2, 59], [7, 17], [2, 3, 5], [11], [2, 61], [3, 41], [2, 31], [5], [2, 3, 7], [127], [2], [3, 43], [2, 5, 13], [131], [2, 3, 11], [7, 19], [2, 67], [3, 5], [2, 17], [137], [2, 3, 23], [139], [2, 5, 7], [3, 47], [2, 71], [11, 13], [2, 3], [5, 29], [2, 73], [3, 7], [2, 37], [149], [2, 3, 5], [151], [2, 19], [3, 17], [2, 7, 11], [5, 31], [2, 3, 13], [157], [2, 79], [3, 53], [2, 5], [7, 23], [2, 3], [163], [2, 41], [3, 5, 11], [2, 83], [167], [2, 3, 7], [13], [2, 5, 17], [3, 19], [2, 43], [173], [2, 3, 29], [5, 7], [2, 11], [3, 59], [2, 89], [179], [2, 3, 5], [181], [2, 7, 13], [3, 61], [2, 23], [5, 37], [2, 3, 31], [11, 17], [2, 47], [3, 7], [2, 5, 19], [191], [2, 3], [193], [2, 97], [3, 5, 13], [2, 7], [197], [2, 3, 11], [199], [2, 5], [3, 67], [2, 101], [7, 29], [2, 3, 17], [5, 41], [2, 103], [3, 23], [2, 13], [11, 19], [2, 3, 5, 7], [211], [2, 53], [3, 71], [2, 107], [5, 43], [2, 3], [7, 31], [2, 109], [3, 73], [2, 5, 11], [13, 17], [2, 3, 37], [223], [2, 7], [3, 5], [2, 113], [227], [2, 3, 19], [229], [2, 5, 23], [3, 7, 11], [2, 29], [233], [2, 3, 13], [5, 47], [2, 59], [3, 79], [2, 7, 17], [239], [2, 3, 5], [241], [2, 11], [3], [2, 61], [5, 7], [2, 3, 41], [13, 19], [2, 31], [3, 83], [2, 5], [251], [2, 3, 7], [11, 23], [2, 127], [3, 5, 17], [2], [257], [2, 3, 43], [7, 37], [2, 5, 13], [3, 29], [2, 131], [263], [2, 3, 11], [5, 53], [2, 7, 19], [3, 89], [2, 67], [269], [2, 3, 5], [271], [2, 17], [3, 7, 13], [2, 137], [5, 11], [2, 3, 23], [277], [2, 139], [3, 31], [2, 5, 7], [281], [2, 3, 47], [283], [2, 71], [3, 5, 19], [2, 11, 13], [7, 41], [2, 3], [17], [2, 5, 29], [3, 97], [2, 73], [293], [2, 3, 7], [5, 59], [2, 37], [3, 11], [2, 149], [13, 23], [2, 3, 5], [7, 43], [2, 151], [3, 101], [2, 19], [5, 61], [2, 3, 17], [307], [2, 7, 11], [3, 103], [2, 5, 31], [311], [2, 3, 13], [313], [2, 157], [3, 5, 7], [2, 79], [317], [2, 3, 53], [11, 29], [2, 5], [3, 107], [2, 7, 23], [17, 19], [2, 3], [5, 13], [2, 163], [3, 109], [2, 41], [7, 47], [2, 3, 5, 11], [331], [2, 83], [3, 37], [2, 167], [5, 67], [2, 3, 7], [337], [2, 13], [3, 113], [2, 5, 17], [11, 31], [2, 3, 19], [7], [2, 43], [3, 5, 23], [2, 173], [347], [2, 3, 29], [349], [2, 5, 7], [3, 13], [2, 11], [353], [2, 3, 59], [5, 71], [2, 89], [3, 7, 17], [2, 179], [359], [2, 3, 5], [19], [2, 181], [3, 11], [2, 7, 13], [5, 73], [2, 3, 61], [367], [2, 23], [3, 41], [2, 5, 37], [7, 53], [2, 3, 31], [373], [2, 11, 17], [3, 5], [2, 47], [13, 29], [2, 3, 7], [379], [2, 5, 19], [3, 127], [2, 191], [383], [2, 3], [5, 7, 11], [2, 193], [3, 43], [2, 97], [389], [2, 3, 5, 13], [17, 23], [2, 7], [3, 131], [2, 197], [5, 79], [2, 3, 11], [397], [2, 199], [3, 7, 19], [2, 5], [401], [2, 3, 67], [13, 31], [2, 101], [3, 5], [2, 7, 29], [11, 37], [2, 3, 17], [409], [2, 5, 41], [3, 137], [2, 103], [7, 59], [2, 3, 23], [5, 83], [2, 13], [3, 139], [2, 11, 19], [419], [2, 3, 5, 7], [421], [2, 211], [3, 47], [2, 53], [5, 17], [2, 3, 71], [7, 61], [2, 107], [3, 11, 13], [2, 5, 43], [431], [2, 3], [433], [2, 7, 31], [3, 5, 29], [2, 109], [19, 23], [2, 3, 73], [439], [2, 5, 11], [3, 7], [2, 13, 17], [443], [2, 3, 37], [5, 89], [2, 223], [3, 149], [2, 7], [449], [2, 3, 5], [11, 41], [2, 113], [3, 151], [2, 227], [5, 7, 13], [2, 3, 19], [457], [2, 229], [3, 17], [2, 5, 23], [461], [2, 3, 7, 11], [463], [2, 29], [3, 5, 31], [2, 233], [467], [2, 3, 13], [7, 67], [2, 5, 47], [3, 157], [2, 59], [11, 43], [2, 3, 79], [5, 19], [2, 7, 17], [3, 53], [2, 239], [479], [2, 3, 5], [13, 37], [2, 241], [3, 7, 23], [2, 11], [5, 97], [2, 3], [487], [2, 61], [3, 163], [2, 5, 7], [491], [2, 3, 41], [17, 29], [2, 13, 19], [3, 5, 11], [2, 31], [7, 71], [2, 3, 83], [499], [2, 5], [3, 167], [2, 251], [503], [2, 3, 7], [5, 101], [2, 11, 23], [3, 13], [2, 127], [509], [2, 3, 5, 17], [7, 73], [2], [3, 19], [2, 257], [5, 103], [2, 3, 43], [11, 47], [2, 7, 37], [3, 173], [2, 5, 13], [521], [2, 3, 29], [523], [2, 131], [3, 5, 7], [2, 263], [
17, 31], [2, 3, 11], [23], [2, 5, 53], [3, 59], [2, 7, 19], [13, 41], [2, 3, 89], [5, 107], [2, 67], [3, 179], [2, 269], [7, 11], [2, 3, 5], [541], [2, 271], [3, 181], [2, 17], [5, 109], [2, 3, 7, 13], [547], [2, 137], [3, 61], [2, 5, 11], [19, 29], [2, 3, 23], [7, 79], [2, 277], [3, 5, 37], [2, 139], [557], [2, 3, 31], [13, 43], [2, 5, 7], [3, 11, 17], [2, 281], [563], [2, 3, 47], [5, 113], [2, 283], [3, 7], [2, 71], [569], [2, 3, 5, 19], [571], [2, 11, 13], [3, 191], [2, 7, 41], [5, 23], [2, 3], [577], [2, 17], [3, 193], [2, 5, 29], [7, 83], [2, 3, 97], [11, 53], [2, 73], [3, 5, 13], [2, 293], [587], [2, 3, 7], [19, 31], [2, 5, 59], [3, 197], [2, 37], [593], [2, 3, 11], [5, 7, 17], [2, 149], [3, 199], [2, 13, 23], [599], [2, 3, 5], [601], [2, 7, 43], [3, 67], [2, 151], [5, 11], [2, 3, 101], [607], [2, 19], [3, 7, 29], [2, 5, 61], [13, 47], [2, 3, 17], [613], [2, 307], [3, 5, 41], [2, 7, 11], [617], [2, 3, 103], [619], [2, 5, 31], [3, 23], [2, 311], [7, 89], [2, 3, 13], [5], [2, 313], [3, 11, 19], [2, 157], [17, 37], [2, 3, 5, 7], [631], [2, 79], [3, 211], [2, 317], [5, 127], [2, 3, 53], [7, 13], [2, 11, 29], [3, 71], [2, 5], [641], [2, 3, 107], [643], [2, 7, 23], [3, 5, 43], [2, 17, 19], [647], [2, 3], [11, 59], [2, 5, 13], [3, 7, 31], [2, 163], [653], [2, 3, 109], [5, 131], [2, 41], [3, 73], [2, 7, 47], [659], [2, 3, 5, 11], [661], [2, 331], [3, 13, 17], [2, 83], [5, 7, 19], [2, 3, 37], [23, 29], [2, 167], [3, 223], [2, 5, 67], [11, 61], [2, 3, 7], [673], [2, 337], [3, 5], [2, 13], [677], [2, 3, 113], [7, 97], [2, 5, 17], [3, 227], [2, 11, 31], [683], [2, 3, 19], [5, 137], [2, 7], [3, 229], [2, 43], [13, 53], [2, 3, 5, 23], [691], [2, 173], [3, 7, 11], [2, 347], [5, 139], [2, 3, 29], [17, 41], [2, 349], [3, 233], [2, 5, 7], [701], [2, 3, 13], [19, 37], [2, 11], [3, 5, 47], [2, 353], [7, 101], [2, 3, 59], [709], [2, 5, 71], [3, 79], [2, 89], [23, 31], [2, 3, 7, 17], [5, 11, 13], [2, 179], [3, 239], [2, 359], [719], [2, 3, 5], [7, 103], [2, 19], [3, 241], [2, 181], [5, 29], [2, 3, 11], [727], [2, 7, 13], [3], [2, 5, 73], [17, 43], [2, 3, 61], [733], [2, 367], [3, 5, 7], [2, 23], [11, 67], [2, 3, 41], [739], [2, 5, 37], [3, 13, 19], [2, 7, 53], [743], [2, 3, 31], [5, 149], [2, 373], [3, 83], [2, 11, 17], [7, 107], [2, 3, 5], [751], [2, 47], [3, 251], [2, 13, 29], [5, 151], [2, 3, 7], [757], [2, 379], [3, 11, 23], [2, 5, 19], [761], [2, 3, 127], [7, 109], [2, 191], [3, 5, 17], [2, 383], [13, 59], [2, 3], [769], [2, 5, 7, 11], [3, 257], [2, 193], [773], [2, 3, 43], [5, 31], [2, 97], [3, 7, 37], [2, 389], [19, 41], [2, 3, 5, 13], [11, 71], [2, 17, 23], [3, 29], [2, 7], [5, 157], [2, 3, 131], [787], [2, 197], [3, 263], [2, 5, 79], [7, 113], [2, 3, 11], [13, 61], [2, 397], [3, 5, 53], [2, 199], [797], [2, 3, 7, 19], [17, 47], [2, 5], [3, 89], [2, 401], [11, 73], [2, 3, 67], [5, 7, 23], [2, 13, 31], [3, 269], [2, 101], [809], [2, 3, 5], [811], [2, 7, 29], [3, 271], [2, 11, 37], [5, 163], [2, 3, 17], [19, 43], [2, 409], [3, 7, 13], [2, 5, 41], [821], [2, 3, 137], [823], [2, 103], [3, 5, 11], [2, 7, 59], [827], [2, 3, 23], [829], [2, 5, 83], [3, 277], [2, 13], [7, 17], [2, 3, 139], [5, 167], [2, 11, 19], [3, 31], [2, 419], [839], [2, 3, 5, 7], [29], [2, 421], [3, 281], [2, 211], [5, 13], [2, 3, 47], [7, 11], [2, 53], [3, 283], [2, 5, 17], [23, 37], [2, 3, 71], [853], [2, 7, 61], [3, 5, 19], [2, 107], [857], [2, 3, 11, 13], [859], [2, 5, 43], [3, 7, 41], [2, 431], [863], [2, 3], [5, 173], [2, 433], [3, 17], [2, 7, 31], [11, 79], [2, 3, 5, 29], [13, 67], [2, 109], [3, 97], [2, 19, 23], [5, 7], [2, 3, 73], [877], [2, 439], [3, 293], [2, 5, 11], [881], [2, 3, 7], [883], [2, 13, 17], [3, 5, 59], [2, 443], [887], [2, 3, 37], [7, 127], [2, 5, 89], [3, 11], [2, 223], [19, 47], [2, 3, 149], [5, 179], [2, 7], [3, 13, 23], [2, 449], [29, 31], [2, 3, 5], [17, 53], [2, 11, 41], [3, 7, 43], [2, 113], [5, 181], [2, 3, 151], [907], [2, 227], [3, 101], [2, 5, 7, 13], [911], [2, 3, 19], [11, 83], [2, 457], [3, 5, 61], [2, 229], [7, 131], [2, 3, 17], [919], [2, 5, 23], [3, 307], [2, 461], [13, 71], [2, 3, 7, 11], [5, 37], [2, 463], [3, 103], [2, 29], [929], [2, 3, 5, 31], [7, 19], [2, 233], [3, 311], [2, 467], [5, 11, 17], [2, 3, 13], [937], [2, 7, 67], [3, 313], [2, 5, 47], [941], [2, 3, 157], [23, 41], [2, 59], [3, 5, 7], [2, 11, 43], [947], [2, 3, 79], [13, 73], [2, 5, 19], [3, 317], [2, 7, 17], [953], [2, 3, 53], [5, 191], [2, 239], [3, 11, 29], [2, 479], [7, 137], [2, 3, 5], [31], [2, 13, 37], [3, 107], [2, 241], [5, 193], [2, 3, 7, 23], [967], [2, 11], [3, 17, 19], [2, 5, 97], [971], [2, 3], [7, 139], [2, 487], [3, 5, 13], [2, 61], [977], [2, 3, 163], [11, 89], [2, 5, 7], [3, 109], [2, 491], [983], [2, 3, 41], [5, 197], [2, 17, 29], [3, 7, 47], [2, 13, 19], [23, 43], [2, 3, 5, 11], [991], [2, 31], [3, 331], [2, 7, 71], [5, 199], [2, 3, 83], [997], [2, 499], [3, 37], [2, 5]]
def test_is_prime():
for prime in PRIMES:
assert is_prime(prime)
for not_prime in [n for n in range(4, 1000) if n not in PRIMES]:
assert not is_prime(not_prime)
def test_prime_factorize():
for prime in PRIMES:
assert prime_factorize(prime) == [prime]
prime_factores: Iterable[tuple[int, Iterable[int]]] = [
(n, prime_factorize(n)) for n in range(2, 1001)]
for n, factores in prime_factores:
for factor in factores:
assert factor in PRIMES
assert PRIME_FACTORES[n] == factores
assert prime_factorize(0) == []
assert prime_factorize(1) == []
assert prime_factorize(-2) == []

46
loops/ex01/test_primes.py Normal file
View File

@ -0,0 +1,46 @@
from primes import is_prime, prime_factorize
from typing import Iterable
PRIMES = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29,
31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
73, 79, 83, 89, 97, 101, 103, 107, 109, 113,
127, 131, 137, 139, 149, 151, 157, 163, 167, 173,
179, 181, 191, 193, 197, 199, 211, 223, 227, 229,
233, 239, 241, 251, 257, 263, 269, 271, 277, 281,
283, 293, 307, 311, 313, 317, 331, 337, 347, 349,
353, 359, 367, 373, 379, 383, 389, 397, 401, 409,
419, 421, 431, 433, 439, 443, 449, 457, 461, 463,
467, 479, 487, 491, 499, 503, 509, 521, 523, 541,
547, 557, 563, 569, 571, 577, 587, 593, 599, 601,
607, 613, 617, 619, 631, 641, 643, 647, 653, 659,
661, 673, 677, 683, 691, 701, 709, 719, 727, 733,
739, 743, 751, 757, 761, 769, 773, 787, 797, 809,
811, 821, 823, 827, 829, 839, 853, 857, 859, 863,
877, 881, 883, 887, 907, 911, 919, 929, 937, 941,
947, 953, 967, 971, 977, 983, 991, 997]
PRIME_FACTORES = [[], [], [2], [3], [2], [5], [2, 3], [7], [2], [3], [2, 5], [11], [2, 3], [13], [2, 7], [3, 5], [2], [17], [2, 3], [19], [2, 5], [3, 7], [2, 11], [23], [2, 3], [5], [2, 13], [3], [2, 7], [29], [2, 3, 5], [31], [2], [3, 11], [2, 17], [5, 7], [2, 3], [37], [2, 19], [3, 13], [2, 5], [41], [2, 3, 7], [43], [2, 11], [3, 5], [2, 23], [47], [2, 3], [7], [2, 5], [3, 17], [2, 13], [53], [2, 3], [5, 11], [2, 7], [3, 19], [2, 29], [59], [2, 3, 5], [61], [2, 31], [3, 7], [2], [5, 13], [2, 3, 11], [67], [2, 17], [3, 23], [2, 5, 7], [71], [2, 3], [73], [2, 37], [3, 5], [2, 19], [7, 11], [2, 3, 13], [79], [2, 5], [3], [2, 41], [83], [2, 3, 7], [5, 17], [2, 43], [3, 29], [2, 11], [89], [2, 3, 5], [7, 13], [2, 23], [3, 31], [2, 47], [5, 19], [2, 3], [97], [2, 7], [3, 11], [2, 5], [101], [2, 3, 17], [103], [2, 13], [3, 5, 7], [2, 53], [107], [2, 3], [109], [2, 5, 11], [3, 37], [2, 7], [113], [2, 3, 19], [5, 23], [2, 29], [3, 13], [2, 59], [7, 17], [2, 3, 5], [11], [2, 61], [3, 41], [2, 31], [5], [2, 3, 7], [127], [2], [3, 43], [2, 5, 13], [131], [2, 3, 11], [7, 19], [2, 67], [3, 5], [2, 17], [137], [2, 3, 23], [139], [2, 5, 7], [3, 47], [2, 71], [11, 13], [2, 3], [5, 29], [2, 73], [3, 7], [2, 37], [149], [2, 3, 5], [151], [2, 19], [3, 17], [2, 7, 11], [5, 31], [2, 3, 13], [157], [2, 79], [3, 53], [2, 5], [7, 23], [2, 3], [163], [2, 41], [3, 5, 11], [2, 83], [167], [2, 3, 7], [13], [2, 5, 17], [3, 19], [2, 43], [173], [2, 3, 29], [5, 7], [2, 11], [3, 59], [2, 89], [179], [2, 3, 5], [181], [2, 7, 13], [3, 61], [2, 23], [5, 37], [2, 3, 31], [11, 17], [2, 47], [3, 7], [2, 5, 19], [191], [2, 3], [193], [2, 97], [3, 5, 13], [2, 7], [197], [2, 3, 11], [199], [2, 5], [3, 67], [2, 101], [7, 29], [2, 3, 17], [5, 41], [2, 103], [3, 23], [2, 13], [11, 19], [2, 3, 5, 7], [211], [2, 53], [3, 71], [2, 107], [5, 43], [2, 3], [7, 31], [2, 109], [3, 73], [2, 5, 11], [13, 17], [2, 3, 37], [223], [2, 7], [3, 5], [2, 113], [227], [2, 3, 19], [229], [2, 5, 23], [3, 7, 11], [2, 29], [233], [2, 3, 13], [5, 47], [2, 59], [3, 79], [2, 7, 17], [239], [2, 3, 5], [241], [2, 11], [3], [2, 61], [5, 7], [2, 3, 41], [13, 19], [2, 31], [3, 83], [2, 5], [251], [2, 3, 7], [11, 23], [2, 127], [3, 5, 17], [2], [257], [2, 3, 43], [7, 37], [2, 5, 13], [3, 29], [2, 131], [263], [2, 3, 11], [5, 53], [2, 7, 19], [3, 89], [2, 67], [269], [2, 3, 5], [271], [2, 17], [3, 7, 13], [2, 137], [5, 11], [2, 3, 23], [277], [2, 139], [3, 31], [2, 5, 7], [281], [2, 3, 47], [283], [2, 71], [3, 5, 19], [2, 11, 13], [7, 41], [2, 3], [17], [2, 5, 29], [3, 97], [2, 73], [293], [2, 3, 7], [5, 59], [2, 37], [3, 11], [2, 149], [13, 23], [2, 3, 5], [7, 43], [2, 151], [3, 101], [2, 19], [5, 61], [2, 3, 17], [307], [2, 7, 11], [3, 103], [2, 5, 31], [311], [2, 3, 13], [313], [2, 157], [3, 5, 7], [2, 79], [317], [2, 3, 53], [11, 29], [2, 5], [3, 107], [2, 7, 23], [17, 19], [2, 3], [5, 13], [2, 163], [3, 109], [2, 41], [7, 47], [2, 3, 5, 11], [331], [2, 83], [3, 37], [2, 167], [5, 67], [2, 3, 7], [337], [2, 13], [3, 113], [2, 5, 17], [11, 31], [2, 3, 19], [7], [2, 43], [3, 5, 23], [2, 173], [347], [2, 3, 29], [349], [2, 5, 7], [3, 13], [2, 11], [353], [2, 3, 59], [5, 71], [2, 89], [3, 7, 17], [2, 179], [359], [2, 3, 5], [19], [2, 181], [3, 11], [2, 7, 13], [5, 73], [2, 3, 61], [367], [2, 23], [3, 41], [2, 5, 37], [7, 53], [2, 3, 31], [373], [2, 11, 17], [3, 5], [2, 47], [13, 29], [2, 3, 7], [379], [2, 5, 19], [3, 127], [2, 191], [383], [2, 3], [5, 7, 11], [2, 193], [3, 43], [2, 97], [389], [2, 3, 5, 13], [17, 23], [2, 7], [3, 131], [2, 197], [5, 79], [2, 3, 11], [397], [2, 199], [3, 7, 19], [2, 5], [401], [2, 3, 67], [13, 31], [2, 101], [3, 5], [2, 7, 29], [11, 37], [2, 3, 17], [409], [2, 5, 41], [3, 137], [2, 103], [7, 59], [2, 3, 23], [5, 83], [2, 13], [3, 139], [2, 11, 19], [419], [2, 3, 5, 7], [421], [2, 211], [3, 47], [2, 53], [5, 17], [2, 3, 71], [7, 61], [2, 107], [3, 11, 13], [2, 5, 43], [431], [2, 3], [433], [2, 7, 31], [3, 5, 29], [2, 109], [19, 23], [2, 3, 73], [439], [2, 5, 11], [3, 7], [2, 13, 17], [443], [2, 3, 37], [5, 89], [2, 223], [3, 149], [2, 7], [449], [2, 3, 5], [11, 41], [2, 113], [3, 151], [2, 227], [5, 7, 13], [2, 3, 19], [457], [2, 229], [3, 17], [2, 5, 23], [461], [2, 3, 7, 11], [463], [2, 29], [3, 5, 31], [2, 233], [467], [2, 3, 13], [7, 67], [2, 5, 47], [3, 157], [2, 59], [11, 43], [2, 3, 79], [5, 19], [2, 7, 17], [3, 53], [2, 239], [479], [2, 3, 5], [13, 37], [2, 241], [3, 7, 23], [2, 11], [5, 97], [2, 3], [487], [2, 61], [3, 163], [2, 5, 7], [491], [2, 3, 41], [17, 29], [2, 13, 19], [3, 5, 11], [2, 31], [7, 71], [2, 3, 83], [499], [2, 5], [3, 167], [2, 251], [503], [2, 3, 7], [5, 101], [2, 11, 23], [3, 13], [2, 127], [509], [2, 3, 5, 17], [7, 73], [2], [3, 19], [2, 257], [5, 103], [2, 3, 43], [11, 47], [2, 7, 37], [3, 173], [2, 5, 13], [521], [2, 3, 29], [523], [2, 131], [3, 5, 7], [2, 263], [
17, 31], [2, 3, 11], [23], [2, 5, 53], [3, 59], [2, 7, 19], [13, 41], [2, 3, 89], [5, 107], [2, 67], [3, 179], [2, 269], [7, 11], [2, 3, 5], [541], [2, 271], [3, 181], [2, 17], [5, 109], [2, 3, 7, 13], [547], [2, 137], [3, 61], [2, 5, 11], [19, 29], [2, 3, 23], [7, 79], [2, 277], [3, 5, 37], [2, 139], [557], [2, 3, 31], [13, 43], [2, 5, 7], [3, 11, 17], [2, 281], [563], [2, 3, 47], [5, 113], [2, 283], [3, 7], [2, 71], [569], [2, 3, 5, 19], [571], [2, 11, 13], [3, 191], [2, 7, 41], [5, 23], [2, 3], [577], [2, 17], [3, 193], [2, 5, 29], [7, 83], [2, 3, 97], [11, 53], [2, 73], [3, 5, 13], [2, 293], [587], [2, 3, 7], [19, 31], [2, 5, 59], [3, 197], [2, 37], [593], [2, 3, 11], [5, 7, 17], [2, 149], [3, 199], [2, 13, 23], [599], [2, 3, 5], [601], [2, 7, 43], [3, 67], [2, 151], [5, 11], [2, 3, 101], [607], [2, 19], [3, 7, 29], [2, 5, 61], [13, 47], [2, 3, 17], [613], [2, 307], [3, 5, 41], [2, 7, 11], [617], [2, 3, 103], [619], [2, 5, 31], [3, 23], [2, 311], [7, 89], [2, 3, 13], [5], [2, 313], [3, 11, 19], [2, 157], [17, 37], [2, 3, 5, 7], [631], [2, 79], [3, 211], [2, 317], [5, 127], [2, 3, 53], [7, 13], [2, 11, 29], [3, 71], [2, 5], [641], [2, 3, 107], [643], [2, 7, 23], [3, 5, 43], [2, 17, 19], [647], [2, 3], [11, 59], [2, 5, 13], [3, 7, 31], [2, 163], [653], [2, 3, 109], [5, 131], [2, 41], [3, 73], [2, 7, 47], [659], [2, 3, 5, 11], [661], [2, 331], [3, 13, 17], [2, 83], [5, 7, 19], [2, 3, 37], [23, 29], [2, 167], [3, 223], [2, 5, 67], [11, 61], [2, 3, 7], [673], [2, 337], [3, 5], [2, 13], [677], [2, 3, 113], [7, 97], [2, 5, 17], [3, 227], [2, 11, 31], [683], [2, 3, 19], [5, 137], [2, 7], [3, 229], [2, 43], [13, 53], [2, 3, 5, 23], [691], [2, 173], [3, 7, 11], [2, 347], [5, 139], [2, 3, 29], [17, 41], [2, 349], [3, 233], [2, 5, 7], [701], [2, 3, 13], [19, 37], [2, 11], [3, 5, 47], [2, 353], [7, 101], [2, 3, 59], [709], [2, 5, 71], [3, 79], [2, 89], [23, 31], [2, 3, 7, 17], [5, 11, 13], [2, 179], [3, 239], [2, 359], [719], [2, 3, 5], [7, 103], [2, 19], [3, 241], [2, 181], [5, 29], [2, 3, 11], [727], [2, 7, 13], [3], [2, 5, 73], [17, 43], [2, 3, 61], [733], [2, 367], [3, 5, 7], [2, 23], [11, 67], [2, 3, 41], [739], [2, 5, 37], [3, 13, 19], [2, 7, 53], [743], [2, 3, 31], [5, 149], [2, 373], [3, 83], [2, 11, 17], [7, 107], [2, 3, 5], [751], [2, 47], [3, 251], [2, 13, 29], [5, 151], [2, 3, 7], [757], [2, 379], [3, 11, 23], [2, 5, 19], [761], [2, 3, 127], [7, 109], [2, 191], [3, 5, 17], [2, 383], [13, 59], [2, 3], [769], [2, 5, 7, 11], [3, 257], [2, 193], [773], [2, 3, 43], [5, 31], [2, 97], [3, 7, 37], [2, 389], [19, 41], [2, 3, 5, 13], [11, 71], [2, 17, 23], [3, 29], [2, 7], [5, 157], [2, 3, 131], [787], [2, 197], [3, 263], [2, 5, 79], [7, 113], [2, 3, 11], [13, 61], [2, 397], [3, 5, 53], [2, 199], [797], [2, 3, 7, 19], [17, 47], [2, 5], [3, 89], [2, 401], [11, 73], [2, 3, 67], [5, 7, 23], [2, 13, 31], [3, 269], [2, 101], [809], [2, 3, 5], [811], [2, 7, 29], [3, 271], [2, 11, 37], [5, 163], [2, 3, 17], [19, 43], [2, 409], [3, 7, 13], [2, 5, 41], [821], [2, 3, 137], [823], [2, 103], [3, 5, 11], [2, 7, 59], [827], [2, 3, 23], [829], [2, 5, 83], [3, 277], [2, 13], [7, 17], [2, 3, 139], [5, 167], [2, 11, 19], [3, 31], [2, 419], [839], [2, 3, 5, 7], [29], [2, 421], [3, 281], [2, 211], [5, 13], [2, 3, 47], [7, 11], [2, 53], [3, 283], [2, 5, 17], [23, 37], [2, 3, 71], [853], [2, 7, 61], [3, 5, 19], [2, 107], [857], [2, 3, 11, 13], [859], [2, 5, 43], [3, 7, 41], [2, 431], [863], [2, 3], [5, 173], [2, 433], [3, 17], [2, 7, 31], [11, 79], [2, 3, 5, 29], [13, 67], [2, 109], [3, 97], [2, 19, 23], [5, 7], [2, 3, 73], [877], [2, 439], [3, 293], [2, 5, 11], [881], [2, 3, 7], [883], [2, 13, 17], [3, 5, 59], [2, 443], [887], [2, 3, 37], [7, 127], [2, 5, 89], [3, 11], [2, 223], [19, 47], [2, 3, 149], [5, 179], [2, 7], [3, 13, 23], [2, 449], [29, 31], [2, 3, 5], [17, 53], [2, 11, 41], [3, 7, 43], [2, 113], [5, 181], [2, 3, 151], [907], [2, 227], [3, 101], [2, 5, 7, 13], [911], [2, 3, 19], [11, 83], [2, 457], [3, 5, 61], [2, 229], [7, 131], [2, 3, 17], [919], [2, 5, 23], [3, 307], [2, 461], [13, 71], [2, 3, 7, 11], [5, 37], [2, 463], [3, 103], [2, 29], [929], [2, 3, 5, 31], [7, 19], [2, 233], [3, 311], [2, 467], [5, 11, 17], [2, 3, 13], [937], [2, 7, 67], [3, 313], [2, 5, 47], [941], [2, 3, 157], [23, 41], [2, 59], [3, 5, 7], [2, 11, 43], [947], [2, 3, 79], [13, 73], [2, 5, 19], [3, 317], [2, 7, 17], [953], [2, 3, 53], [5, 191], [2, 239], [3, 11, 29], [2, 479], [7, 137], [2, 3, 5], [31], [2, 13, 37], [3, 107], [2, 241], [5, 193], [2, 3, 7, 23], [967], [2, 11], [3, 17, 19], [2, 5, 97], [971], [2, 3], [7, 139], [2, 487], [3, 5, 13], [2, 61], [977], [2, 3, 163], [11, 89], [2, 5, 7], [3, 109], [2, 491], [983], [2, 3, 41], [5, 197], [2, 17, 29], [3, 7, 47], [2, 13, 19], [23, 43], [2, 3, 5, 11], [991], [2, 31], [3, 331], [2, 7, 71], [5, 199], [2, 3, 83], [997], [2, 499], [3, 37], [2, 5]]
def test_is_prime():
for prime in PRIMES:
assert is_prime(prime)
for not_prime in [n for n in range(4, 1000) if n not in PRIMES]:
assert not is_prime(not_prime)
def test_prime_factorize():
for prime in PRIMES:
assert prime_factorize(prime) == [prime]
prime_factores: Iterable[tuple[int, Iterable[int]]] = [
(n, prime_factorize(n)) for n in range(2, 1001)]
for n, factores in prime_factores:
for factor in factores:
assert factor in PRIMES
assert PRIME_FACTORES[n] == factores
assert prime_factorize(0) == []
assert prime_factorize(1) == []
assert prime_factorize(-2) == []

View File

0
strings/README.md Normal file
View File