# Why does the function not work properly when processing numbers?

so I’m trying to get the of a given number. The thing is, the code prints the wrong message and it also doesn’t work with all numbers. Why is that?

This is the part to get the factors:

```thefactors = []
d = 2
while d*d <= number:
while (number % d) == 0:
factors.append(d)
number //= d
d += 1
break

if number > 1:
factors.append(number)
print('The factors of {} are:'.format(number), thefactors)
```

What’s going on and how do I fix it?

## Answer

The issue I see is that you are both checking that the square of `d` is less than `n` (`d*d <= n` or `d**2 <= n`) AND that you reassign `n` when a factor is discovered (`n //= d`). This is not including the unnecessary `break` statement.

Here’s what I did:

```>>> def factorization(n):
factors = []
d = 2
while d <= n:
if n % d == 0:
factors.append(d)
n //= d
d = 2
else:
d += 1
return factors

>>> factorization(104)
[2, 2, 2, 13]
>>> factorization(9)
[3, 3]
>>>
```

This method implicitly checks that `d**2` is less than or equal to `n`, since, to satisfy the `while` condition, `n // d` must be less than or equal to `d`, thus `d**2` must be less than or equal to `n`.

To print the prime factorization:

```>>> num = 104
>>> factors = factorization(num)
>>> print(f"The prime factors of {num} are {factors}")
The prime factors of 104 are [2, 2, 2, 13]
>>> print(f"The prime factors of {num} are {', '.join(factors)}")
The prime factors of 104 are 2, 2, 2, 13
```