21 lines
782 B
Python
21 lines
782 B
Python
# 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 # 输出结果
|