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))
0

1 Answer 1

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
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.