```███╗   ██╗ ██████╗  ██████╗ ██████╗ ██╗   ██╗██╗     ███████╗
████╗  ██║██╔═══██╗██╔═══██╗██╔══██╗██║   ██║██║     ╚══███╔╝
██╔██╗ ██║██║   ██║██║   ██║██║  ██║██║   ██║██║       ███╔╝
██║╚██╗██║██║   ██║██║   ██║██║  ██║██║   ██║██║      ███╔╝
██║ ╚████║╚██████╔╝╚██████╔╝██████╔╝╚██████╔╝███████╗███████╗
╚═╝  ╚═══╝ ╚═════╝  ╚═════╝ ╚═════╝  ╚═════╝ ╚══════╝╚══════╝

```

# What is the largest prime factor of the number 600851475143 ?

</br>

This one took a few hours of researching and figuring out. At first, I had tried a bruteforcing and direct method of trying to build a working method for the test case of 13195, which went something like this:

``````def prime(n):
table = []
for i in range(2, n):
if(n % i == 0):
for j in range(0, i):
if(j / i != 0):
table.append(i)
elif (j / i == 0):
break
return table

prime(13195)
``````

To which I got a table with the prime factors as exemplified in the problem, but also a lot of excess and leading 0’s. And it took much too long overall to calculate. It was a helluva mess for sure.
And then with some research I figured that a while-loop thrown in would definitely cut down the time and increase efficiency in calculating the factors, as for-loops would be on a one by one basis in calculating whereas while-loops just go on until a certain point.
Solution:

``````import math
def primeFactors(n):
for i in range(3,int(math.sqrt(n))+1,2):
while n % i== 0:
print(i)
n = n / i
if n > 2:
print(n)
primeFactors(600851475143)
``````