【问题标题】:python code to check prime number consider (55,25 ) is prime number [duplicate]检查素数的python代码考虑(55,25)是素数[重复]
【发布时间】:2020-04-23 18:18:16
【问题描述】:

snap shot for code 在数字列表中检查素数的python程序将55和25视为素数,这实际上不是素数,因为55/5 = 11并且提醒为零 那么代码有什么问题

def check_prime(n):
    for i in range(2,n,1):
        if(n%i)==0:
            return  1
        else :
            return 0

numbers=[51,52,53,54,55,13,407,508,11,17,60,12,19,25,30,]
for j in numbers:
    if check_prime(j)==1:
        print("the {} is not prime".format(j))
    else:
        print("th {} is prime".format(j))

【问题讨论】:

  • 你能把你的代码贴在这里吗?
  • 我可以建议翻转返回值吗?它与您的问题无关,但如果您将函数名称 check_prime 视为“这是一个质数吗?”的问题,那么您希望返回值 1 为是,0 为否。

标签: python numbers primes


【解决方案1】:

check_prime 函数有逻辑错误,试试这个:

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


numbers = [51, 52, 53, 54, 55, 13, 407, 508, 11, 17, 60, 12, 19, 25, 30, ]
for j in numbers:
    if check_prime(j):
        print("the {} is not prime".format(j))
    else:
        print("th {} is prime".format(j))

【讨论】:

  • 好的,非常感谢,但是为什么代码返回这个错误时只有数字可以被 5 整除
【解决方案2】:

因为,您将 return 放入您的函数中,因此您的函数仅在其他函数中进行第一次评估,仅当数字为奇数或曾经返回时才返回,因为仅在 i = 2 时评估,您的函数必须是.

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

【讨论】:

    【解决方案3】:

    您的函数在单次迭代后返回,取消了 for 循环的效果。当发现它不是质数时,您想返回,但您需要继续循环遍历所有数字,然后才能说质数是质数。此外,翻转了返回值以使其更直观。

    def check_prime(n):
        for i in range(2,n,1):
            if(n%i)==0:
                return  0
        return 1
    

    【讨论】:

    • 但是为什么返回数字 11 作为素数 19 作为素数 a
    • 因为它们都在 x%2==0 上失败然后停止循环,所以它们都被标记为素数。对于 11 和 19,这是正确的,但对于 25 和 55 则不正确。
    【解决方案4】:

    您需要在循环中设置返回条件。在这种情况下,它将在一个循环后退出,这就是您看到它返回误报的原因。

    【讨论】:

      猜你喜欢
      • 2015-09-30
      • 2015-03-17
      • 1970-01-01
      • 2013-10-23
      • 2016-02-21
      • 2020-07-19
      • 1970-01-01
      • 2011-05-06
      • 1970-01-01
      相关资源
      最近更新 更多