我不知道为什么,但是当我运行以下代码时,它返回9作为质数

时间:2020-07-09 11:27:10

标签: python

我应该创建一个函数,该函数接受整数并返回是否为质数,但由于某种原因,它返回9作为质数

def prime(x):
    if x == 0 or x == 1:
        return "not prime"
    elif x == 2:
           return "prime"
    else:
      for numbers in range(2,x):
       if x % numbers == 0:
            return "not prime"
       else:
            return "prime"

for i in range(20):
    print (i, prime(i))

2 个答案:

答案 0 :(得分:2)

第一个数字是偶数或素数。

9是代码中真正显示错误的第一个数字。

错误是:如果一项测试失败,则返回“ prime”。由于9 % 2不为0,因此测试在那里失败。

(天真)重写为:

  for numbers in range(2,x):
     if x % numbers == 0:
          return "not prime"
  return "prime"

因此,如果循环结束而不返回数字,则为质数。

请注意,有更好更好的方法来测试素数。例如,不要循环到x-1,而要循环到x(包括)的平方根,因为在该值之后不能存在除数。

 for numbers in range(2,int(x**0.5)+1):

答案 1 :(得分:0)

您的代码将在第一次迭代时返回答案,此时它将停止迭代:

for numbers in range(2,x):
  if x % numbers == 0:
    return "not prime"
  else:
    return "prime"

这从2开始,如果它均匀地变成x,则它不返回质数,如果不相等,则返回质数,并且以任何一种方式停止。

for numbers in range(2,x):
  if x % numbers == 0:
    return "not prime"
return "prime"

这可以解决问题,因为如果没有数字返回“不是素数”,它只会返回“素数”。