Coursework · Stop 2 of 10

Prime factorization

A program that breaks a number into its prime factors and notes the time it took.

Prime factorization

Goal

Turn a mathematical method into loops myself, without a ready-made library.

Implementation

  • Three versions with my own logic: numbers still to be split go into one list, the primes found into a second one.
  • Nested loops check the divisors from both ends at once.
  • Start and end time show how long the factorization took.

Code

The factorization in three nested loops

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

Numbers move between two lists until only primes are left.

What I learned

Thinking a process through on paper first, and how quickly nested loops get hard to follow.

An unexpected error has occurred. Reload 🗙

Reconnecting to the server …

Connection failed. Trying again in seconds.

Connection failed. Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session. Please retry or reload the page.