0

I am trying to write code that will decompose a number into its prime factorization. It works so far for even numbers, but when I try an odd number it gets stuck. I don't know why that happens. I don't get an error it just stops doing anything.

The code:

priemwaarde = 100
priemgetallen = []
nonpriemgetallen = []
for x in range(2,priemwaarde):
    prime = True
    for i in range(2,x):
        if x % i  == 0:
            prime = False
    if prime == False:
        nonpriemgetallen.append(x)
    else:
        priemgetallen.append(x)

def PriemFactoren(getal):
    factoren = []
    a = getal
    while a not in priemgetallen:
        for priem in priemgetallen:
            if a % priem == 0:
                factoren.append(priem)
                a = a / priem
    a = int(a)
    if getal not in priemgetallen:
        factoren.append(a)
    return factoren
print(PriemFactoren(56))
print(PriemFactoren(55))
Henry Ecker
  • 34,399
  • 18
  • 41
  • 57
darian.py
  • 3
  • 1

1 Answers1

1

If you add a print statement or a debug breakpoint within your while loop, you'll find that it's stuck because the value of a is eventually 1, and it's not able to find it in priemgetallen.

A quick fix to break out of the infinite loop that comes to mind is to just add it to the list:

priemgetallen.append(1)

I suppose another option is to handle that value explicitly, so something like this should also break the infinite loop:

def PriemFactoren(getal):
    factoren = []
    a = getal
    while a not in priemgetallen:
        #### Added lines
        if a == 1:
            break
        #### End
        for priem in priemgetallen:
            if a % priem == 0:
                factoren.append(priem)
                a = a / priem
    a = int(a)
    if getal not in priemgetallen:
        factoren.append(a)
    return factoren
rv.kvetch
  • 9,940
  • 3
  • 24
  • 53