Files
eidp-klausuraufgaben/loops/ex01/solution/README.md
2024-01-29 19:09:42 +01:00

1.4 KiB

Solution

is_prime

Zunächst überprüfen wir alle Randbedingungen für n < 2

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

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.

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
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
if is_prime(n + 1):
    return n + 1
else:
    return next_prime(n + 1)