[Euler Project Problem 3]Largest prime factor

2015. 7. 16. 02:05
def isprime(x):
    r = int(sqrt(x))
    if x%2 == 0:
        return 0
    for i in range(3, r+1, 2):
        if x%i == 0:
            return 0
    return 1

def diminish(x, a):
    while x%a ==0:
        x /= a
    return x

def lpf(x):
    def lpfSub(a, result):
        if a<2:
            return result
        elif isprime(a):
            return a
        for i in range(max(3, result), int(sqrt(a))+1, 2):
            if isprime(i) and a%i == 0:
                a = diminish(a, i)
                result = i
                return lpfSub(a, result)
    result = 1
    if x%2 == 0:
        result = 2
        x = diminish(x, 2)
    return lpfSub(x, result)

print lpf(600851475143)

.

Algorithm/Project Euler