【问题标题】:Python-Prime number checker-product of primesPython-素数检查器-素数的乘积
【发布时间】:2015-05-18 20:43:29
【问题描述】:

我编写了以下代码来检查一个数字是否为素数。虽然有更有效的方法可以做到这一点,但我确实注意到,虽然这适用于最大的素数,但它会破坏每个素数的乘积。因此,虽然它正确地将 13 和 17 识别为素数,但它也将 91 (13 × 7) 识别为素数。任何想法为什么?

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

answer = checkifprime(91)
print (answer)

【问题讨论】:

  • 您只需要检查给定数字的(~平方根+1)以内的数字。
  • 在循环外检查偶数,然后您只需检查循环中的奇数:3、5、7、9 ...。正如corn3lius所说,一旦达到数字的平方根,您就可以停止检查。

标签: python primes


【解决方案1】:

return True 缩进太远;它在循环内部并导致函数在第一次迭代时退出,因此您的函数实际上只检查数字是否为奇数。

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

【讨论】:

    【解决方案2】:

    您的程序永远不会超过第一次迭代。您实际上拥有的是偶数或奇数检查器。程序总是在循环的第一次迭代中返回。你返回True 太早了。

    【讨论】:

      【解决方案3】:

      return True 语句没有正确缩进 - 您已将它放在 for 循环中。因此,循环以2 开始,如果数字是奇数,则不会进入if,然后返回True。您应该将此语句置于for 循环之后。只有在循环用完后,如果您没有找到任何合适的除数,您可以返回这个数字是素数:

      def checkifprime(numtocheck):
          for x in range(2,numtocheck):
              if(numtocheck % x == 0):
                  return False
          return True # Note the indendation
      

      【讨论】:

        猜你喜欢
        • 2015-07-21
        • 1970-01-01
        • 2021-12-16
        • 2015-11-04
        • 1970-01-01
        • 2013-10-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多