import math
def is_prime(n):
if n < 2:
return False
for i in xrange(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
for i in range(1,int(math.sqrt(600851475143)+1)):
if 600851475143%i==0 and is_prime(i)==True:
a=i
print a
这不是一个好的解决方案,但是刚开始把题意理解错了,把下部分写了。后来发现加一个判断质数的函数就够了。
大神们的代码如下:
hellomatt
x=int(600851475143**0.5) result=0 for i in range(2,x): if 600851475143%i==0: bol=False for z in range(2,i): if i%z==0: bol=True if bol==False: result=i print result
TsiGwong
factors = []
maximum = 600851475143
def getFactor(x):
y = x // 2
i = 2
while True:
if i > y:
break
if x % i == 0 :
factors.append(i)
return getFactor(x / i)
break
i += 1
return x
factors.append(getFactor(maximum))
print factors[-1]