项目欧拉的3号

时间:2016-04-30 20:34:25

标签: python

有人可以解释为什么这段代码适用于样本号13195,但是当我使用问题编号时会崩溃

num = 13195

def isprime(num):
  for i in range(2,num):
    if num % i == 0:
      ans = i
  return ans

print isprime(isprime(isprime(num)))

2 个答案:

答案 0 :(得分:2)

在Python 2中,range构造一个列表。所以该程序试图在内存中包含一个巨大的列表,它不能。使用xrange将生成迭代所需的数字,而不是一次性生成所有数字。

你还需要尽早结束循环,否则它会花费很多时间来检查这么多数字。因此,一旦找到除数,就用它来划分原始数字,使其变小,从而易于管理。

答案 1 :(得分:0)

您需要为ans分配默认值。

当输入数字是素数时,程序永远不会为变量ans分配任何内容。因此,当函数尝试返回该变量时,实际上并未对其进行定义。