# coding=utf-8 ''' The prime factors of 13195 are 5, 7, 13 and 29. What is the largest prime factor of the number 600851475143 ? ''' '''分解因数,如果是素数返回''' def factor(x, min = 2): temp = min while temp <= int(x ** 0.5) + 1: #从最小值到上界开始尝试 if x % temp == 0: return temp # 如果 a 能分解则返回最小因子 else: temp += 1 return 1 # 如果 a 是素数就返回 1,此处也可以设置为返回 x 本身 n = 600851475143 i = 2 # 尝试循环分解 n 的因子 while i <= int(math.sqrt(n)) + 1: if n % i == 0 : # 如果满足 i 整除 n if factor(n / i) == 1: break # 同时 n / i 是素数则返回 else: n /= i # 如果 n / i 不为素数,就缩小 n 以减小运算量 i += 1 print n / i # 输出结果