有人可以解释为什么这段代码适用于样本号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)))
答案 0 :(得分:2)
在Python 2中,range
构造一个列表。所以该程序试图在内存中包含一个巨大的列表,它不能。使用xrange
将生成迭代所需的数字,而不是一次性生成所有数字。
你还需要尽早结束循环,否则它会花费很多时间来检查这么多数字。因此,一旦找到除数,就用它来划分原始数字,使其变小,从而易于管理。
答案 1 :(得分:0)
您需要为ans
分配默认值。
当输入数字是素数时,程序永远不会为变量ans
分配任何内容。因此,当函数尝试返回该变量时,实际上并未对其进行定义。