我是初学者,我在做第三个问题时遇到问题,这是关于找到最大的素数因素600851475143,我得到了这个错误:
Python int太大而无法转换为C long
plist = [2]
def primes(min, max):
if 2 >= min:
yield 2
for i in xrange(3, max, 2):
for p in plist:
if i % p == 0 or p * p > i:
break
if i % p:
plist.append(i)
if i >= min:
yield i
def factors(number):
for prime in primes(2, number):
if number % prime == 0:
number /= prime
yield prime
if number == 1:
break
a = 600851475143
print max(factors(a))
答案 0 :(得分:2)
令人讨厌的是,在Python 2中,xrange
要求其参数适合C long
。 600851475143
对您的系统来说太大了。您必须将算法重写为不需要如此大的范围,或者使用替代方法,例如您自己的xrange
实现,或者使用手动计数器管理的while
循环。
答案 1 :(得分:-2)
当您处理的号码大于sys.maxsize
您可以使用numpy模块并使用更大的数据类型。不确定你需要多大的东西。