**Algorithm explained**

Start with the smallest prime(p=2) and divide the evil number (e)

If it divides, extract he largest power of 2 from e possible.

--The divisor now is divisible by a prime factor greater than 2 and can utmost be e/2^i

--increment p to 3 and so on. Also check if e/3 is less than 3. This forms the outer limit

If the smallest prime (p=2) does not divide the number (e), even better for us

-- The number is divisible by something greater than 2 and hence, the other factor is less than e/2.

-- increment p by 1 and check if less than e/2. redo from 1st step

Heres the program,

# Problem 3 - to find the largest prime factor of a number

n= 600851475143

z=n

i = gcf = 2

while i <>

if n%i == 0:

x = 1

while (n%(i**x)) == 0:

x = x + 1

z =n/(i**(x-1))

n = z

gcf = z

print i," power ",x-1, " and other divisor is ", z

else:

z = n/i

gcf=n

i=i+1

print "The program is complete and the gratest prime factor is ", gcf