Unterricht und Kurs · Station 2 von 10

Primfaktorzerlegung

Ein Programm, das eine Zahl in ihre Primfaktoren zerlegt und die Rechenzeit mitschreibt.

Primfaktorzerlegung

Ziel

Ein mathematisches Verfahren selbst in Schleifen übersetzen, ohne fertige Bibliothek.

Umsetzung

  • Drei Versionen mit eigener Logik: Zahlen, die noch zerlegt werden müssen, landen in einer Liste, gefundene Primzahlen in einer zweiten.
  • Geschachtelte Schleifen prüfen die Teiler von beiden Seiten gleichzeitig.
  • Start- und Endzeit zeigen, wie lange die Zerlegung gedauert hat.

Code

Die Zerlegung in drei verschachtelten Schleifen

primfaktor_v3.py
while True:
    if sum(control_numbers) == 0:
        end = datetime.now()
        endtime = end.strftime('%H:%M:%S')
        if len(prime_number) == 1:
            print(line)
            print(f"|Startzeit: {starttime} | Endzeit: {endtime}]")
            print(f"Die Zahl {number:.0f} ist eine Primzahl")
            print(line)
            break
        else:
            print(line)
            print(f"[Startzeit: {starttime} | Endzeit: {endtime}]")
            print(f"Deine zerlegte Zahl: {number:.0f}")
            print(" x ".join(f"{zahl:.0f}" for zahl in prime_number))
            print(line)
            break
    else:
        while True:
            if control_numbers[0] <= 2:
                prime_number.append(control_numbers[0])
                control_numbers.pop(0)
                break

            elif control != control_numbers[0] or counter > counter2:
                control = 0
                control += control_numbers[0]
                counter = 2
                counter2 = 0
                counter2 = counter2 + control_numbers[0] - 1
            else:
                while True:
                    if control_numbers[0] <= 2 or counter > counter2:
                        prime_number.append(control_numbers[0])
                        control_numbers.pop(0)
                        break
                    elif control_numbers[0] % counter != 0 and control_numbers[0] % counter2 != 0:
                        counter += 1
                        counter2 -= 1
                        print(f"{control_numbers} {counter} {counter2}")
                    else:
                        control_numbers.append(counter)
                        control_numbers.append(control_numbers[0] / counter)
                        control_numbers.pop(0)
                        break
                break

Zahlen wandern zwischen zwei Listen, bis nur noch Primzahlen übrig sind.

Was ich gelernt habe

Einen Ablauf erst auf Papier zu durchdenken, und wie schnell geschachtelte Schleifen unübersichtlich werden.

Es ist ein unerwarteter Fehler aufgetreten. Neu laden 🗙

Verbindung wird wiederhergestellt …

Verbindung fehlgeschlagen. Nächster Versuch in Sekunden.

Verbindung fehlgeschlagen. Bitte erneut versuchen oder die Seite neu laden.

Die Sitzung wurde vom Server pausiert.

Die Sitzung konnte nicht fortgesetzt werden. Bitte erneut versuchen oder die Seite neu laden.