这似乎是正常的代码,并且运行良好,但是由于任何原因,当我尝试输入此号码= 18765411123451时,计算机似乎死机了,有什么线索吗?
num = 18765411123451
if num > 1:
for i in range(2,num):
if num % i == 0:
print(num,"is not a prime number")
print("Because", i,"x",num//i, "=" ,num)
break
else:
print(num,"is a prime number")
else:
print(num,"is not a prime number")
我尝试了许多其他数字,除了该数字之外,代码也可以正常工作。这里发生了什么?
答案 0 :(得分:3)
它冻结了,因为您的电话号码太高了。
原因是for i in range(2,num):
与num = 18765411123451
与100万亿...
另外,python 2会尝试分配该内存只是为了创建要在其上进行迭代的列表(在这种情况下,请使用xrange
)
好消息:您不必检查数字本身,只需检查直到平方根(包括在内)即可。
for i in range(2,int(num**0.5)+1):
这是更合理的(少于500万次迭代),并且将提供相同的结果。
粘贴数字的平方根,如果您尚未找到除数,那么以后将找不到任何值(如果q
是num
的除数,那么p*q == num
p
或q
必须小于或等于num
的平方根