In [1]:
!factor 600851475143 | rev | awk '{print $1}' | rev


6857

In [2]:
import math

def largest_factor(x):
    factors = []
    factor = 2
    while factor <= math.sqrt(x):
        while x % factor == 0:
            factors.append(factor)
            x /= factor
        factor += 1
    if x != 1:
        factors.append(x)
    return factors

In [3]:
%timeit largest_factor(600851475143)


1000 loops, best of 3: 1.31 ms per loop

In [4]:
def largest_factor(x):
    factors = []
    factor = 2
    while factor * factor <= x:
        while x % factor == 0:
            factors.append(factor)
            x /= factor
        factor += 1
    if x != 1:
        factors.append(x)
    return factors

In [5]:
%timeit largest_factor(600851475143)


1000 loops, best of 3: 990 us per loop

In [6]:
largest_factor(1000)


Out[6]:
[2, 2, 2, 5, 5, 5]

In [7]:
largest_factor(600851475143)


Out[7]:
[71, 839, 1471, 6857L]

In [8]:
largest_factor(600851475143)[-1]


Out[8]:
6857L