excobra - 1 year ago 111
Python Question

# How to print all factorization of an integer in Python 3.5.1

I am new to programming and trying to learn for loop, nested for loop with if statement.

I have written this code to produce all factorisations of an integer

`n`
:

``````n=int(input())
for i in range(0,n+1):
for j in range(0,i):
if i*j == n:
print(i,'times',j,'equals',n)
break
``````

now if n=10 it produces the following result:

5 times 2 equals 10

10 times 1 equals 10

The are couple of problems with this one. First is that it ignores the first factorisation i.e.

1 times 10 equals 10

Second problem i want the
`i`
and
`j`
to be swapped in result i.e. it should say:

1 times 10 equals 10

2 times 5 equals 10

10 times 1 equals 10

not

1 times 10 equals 10

5 times 2 equals 10

10 times 1 equals 10

``````for i in range(0,n+1):
for j in range(0,i):
``````

Here, `j` is in the range `(0,i)`, which means, when `i` is `1`, `j` iterates from `0` to `1`, of course their product won't be `n` when `n` is `10`.

The fix is simple:

``````for i in range(0,n+1):
for j in range(0,n+1):
``````

However, the algorithm is pretty slow for big `n`. You don't have to iterate `j` and tests if `i * j == n`, just calculate `j` with `n / i` and tests if it's an integer would do well.

Another optimization is: considering that factors are paired, you only needs to iterate `i` to the square root of `n`, instead of all the way up to `n`.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download