函数检查python中的数字x是否为素数

2024-04-19 20:35:29 发布

您现在位置:Python中文网/ 问答频道 /正文

到目前为止我所做的是:

def check_prime(x):
  if x >= 2:
    for n in range(2, x - 1):
      if x % n == 0:
        return False
      else:
        return True
  else:
    return False

但是,当我检查任何一个数>;=2是否为素数时,它返回None,而不是True或{}。check_prime(0)返回False和{}返回False。为什么任何数字>;=2都会返回None以及如何修复此问题


Tags: ingtnonefalsetrueforreturnif
3条回答

问题1:问题是range(n, x-1)。在

如果您的输入是2或3,range(2, x-1)将是一个空列表,因为range的第二个参数是排他的。在

因为你只在for循环内部返回,它永远不会返回那里,所以它返回None(也就是说,它什么也不返回)。在

问题2:除了从不进入for循环if x = 2或{}之外,您的代码还有一些问题。在

正如您编写的,它将在第一次迭代中返回。当然,如果x % n == 0你知道x不是质数,可以返回{}。但是,即使n不是x的一个因素,你仍然需要检查其他潜在因素。在

您应该在for循环之外返回True,而不是在循环内部。在

解决方案:

if x == 2: return True
if x%2 == 0 or x < 2: return False
for n in range(3, x/2, 2):
  if x % n == 0:
    return False
return True

您的函数是错误的,因为您不应该在循环中返回True(在您的代码中,循环将始终运行一次)。在

def check_prime(x):
    if x >= 2:
        for n in range(2, x ):
            if (x % n) == 0:
                return False
        #after the complete for n loop
        return True
    else:
        return False

签出正在工作的小提琴:http://pythonfiddle.com/check-prime

除此之外,您还可以通过将x(取整)的平方根作为循环的终点(不要忘记+1,因为range不包含)。因为一旦你超过平方根你就会得到镜像选项。(6×4=4×6=20。20的平方根是5)。在

这是你的固定密码。其中有多个问题,即:

  1. 例如,当number是2时,您进入了if循环,但是循环没有执行,因此得到了None。在
  2. ^因此,{cd6>不必写。在
  3. 你需要检查直到n的每一个数(好吧,当你优化你的代码:))时,你不必检查,但是如果我有一个像99=3*33这样的数字,它就不能被2整除,并且会将它分类为一个素数,尽管它是一个复合数。在

您可以进行一些基本的优化,例如检查最多为sqrt(n)的数字,检查数字是否可以被2整除以放弃一半的选择,等等

'

def check_prime(x):
    for n in range(2, x):
        if x % n == 0:
            return False
    return True

相关问题 更多 >