素数检查器失败

时间:2018-10-09 09:05:47

标签: python numbers calculation

这似乎是正常的代码,并且运行良好,但是由于任何原因,当我尝试输入此号码= 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")

我尝试了许多其他数字,除了该数字之外,代码也可以正常工作。这里发生了什么?

1 个答案:

答案 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万次迭代),并且将提供相同的结果。

粘贴数字的平方根,如果您尚未找到除数,那么以后将找不到任何值(如果qnum的除数,那么p*q == num pq必须小于或等于num的平方根