【问题标题】:Writing a function that checks prime numbers编写一个检查素数的函数
【发布时间】:2020-04-21 17:25:18
【问题描述】:
def primecheck(num): 
if num > 1:  
    for i in range(2, num): 
        if (num % i) == 0: 
            return False 
            break
        else: 
            return True

我正在尝试创建一个函数来检查输入是否为素数。如果我输入质数,此代码确实返回 True,但每当我输入质数的倍数时它也会输入 true?为什么会这样

谢谢

【问题讨论】:

  • 只有在检查范围内的所有数字都不能整除 num 时才应该返回 True。
  • 这不适用于什么输入?
  • @BilltheLizard 正如我所说,素数的倍数,如 15、35、49 等
  • return 代码停止后,因此您的 i 变为 2 然后它在 if 或 else 块中返回。所以只有你检查的i 是 2。你应该只在 for 块之后返回 True。
  • 问题出在你的 if-else 上。假设你的号码是 15。然后从 2 到 14,for 循环将执行。所以只有第一次 (15%2!=0) 所以它将进入 else 语句并返回 True 而不进一步执行循环。

标签: python


【解决方案1】:

您的代码的问题是您在循环的第一次迭代中有return 语句。也不需要break 语句。将return True 移到循环之外给出了解决方案:

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

我为你留下num = 0 或 1。

【讨论】:

    【解决方案2】:

    或者你可以简单地使用 for else。

    def primecheck(num):
       if num>1:
          for i in range(2, num):
               if num%i==0:
                    return False
                    break
          else:
               return True
    print(primecheck(15))
    

    【讨论】:

      【解决方案3】:

      问题在于您的else 声明,不需要它。而且也不需要break

      def primecheck(num):
          if num > 1:
              for i in range(2, num):
                  if (num % i) == 0:
                      return False
          return True
      

      或者您可以解决它无需任何迭代。你可以使用Fermat's little theorem轻松解决这个问题(希望你参考),

      def primeChecker(n):
          m = 2   #can be any number
          if(n > 1):
              if (((m**n)-m)%n == 0):  #Using Fermat's little theorem
                  return True
          return False
      
      
      n = int(input());
      if primeChecker(n):
          print('{} - is prime number'.format(n))
      else:
          print('{} - NOT a prime number'.format(n))
      

      在互联网上进行一些研究将有助于更轻松有效地解决这些类型的问题。 ;)。干杯!

      【讨论】:

        【解决方案4】:

        您在 else 部分使用了 return。因此,您的代码将在第一次迭代后中断并打印第一次迭代的结果。

        你可以这样做:

        def primecheck(num): 
            if num > 1:  
                for i in range(2, num): 
        
                    if (num % i) == 0: 
                        return False
        
                return True          
        
        print(primecheck(15))
        

        【讨论】:

        • 您可以删除breakelse:continue。它们只会让代码更混乱。
        • @rpoleski 同意
        猜你喜欢
        • 1970-01-01
        • 2019-09-20
        • 2023-02-02
        • 2023-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多