#!/usr/bin/python3 #!/usr/bin/python3 def is_prime(n): if n < 4 : return True for i in range(2, int(n**0.5 + 1)): if not n%i: return False return True def largest_prime_factor(n): i = int(n**0.5 +1) while i > 1 : if not n%i and i&1: if is_prime(i): return i i -= 1 return None def largest_prime_factor_optimized(n): factor = 2 lastfactor = 1 while n > 1: if not n%factor: lastfactor = factor n = n//factor while n%factor == 0: n = n//factor factor += 1 return lastfactor def test_largest_prime_factor(): assert(largest_prime_factor(13195)== 29) print(largest_prime_factor(600851475143)) assert(largest_prime_factor_optimized(13195) == 29) print(largest_prime_factor_optimized(600851475143)) print('Tests Passed!') if __name__ == '__main__': test_largest_prime_factor()