【问题标题】:python code trying to find prime number. Code is counting not prime number. Can't find whypython代码试图找到素数。代码不是素数。找不到原因
【发布时间】:2016-01-08 05:21:16
【问题描述】:

我试图在用户选择的范围内找到每个素数,列出它们并计算它们。我的代码计数和列表编号不是素数。我真的找不到原因?有人可以帮帮我吗。

print("This code will count how many prime number exist in a certain range")
count = 0
lower = int(input("Enter lower range: "))
upper = int(input("Enter upper range: "))
prime = []
for num in range(lower, upper + 1):
    if num > 1:
        for i in range(2,num):
            if (num % i) == 0:
                break
            else:
                prime.append(num)
                break
print(prime)
print("There are", len(prime), "prime number between", lower, "and", upper)

【问题讨论】:

    标签: python python-2.7 debugging


    【解决方案1】:

    问题来了,

        for i in range(2,num):
            if (num % i) == 0:    #If num is divisible by SOME i, it is not prime. Correct.
                break
            else:                 #If num is not divisible by SOME i, it is not prime. WRONG.
                prime.append(num)
                break
    

    您应该像这样检查条件:If num is not divisible by ANY i, it is prime

    使用 else 和 for 进行最小更改,

        for i in range(2,num):
            if (num % i) == 0:
                break
        else:
            prime.append(num)
    

    阅读更多:Why does python use 'else' after for and while loops?

    【讨论】:

      【解决方案2】:

      你的素数部分是错误的。我将把它抽象为一种不同的方法以使其更容易。要成为素数,n%x 必须支持任何 x,使得 x 在数字集合 [2,ceil(sqrt(n))] 中。

      确保您import math

      def is_prime(num):
          for i in range(2, math.ceil(num**(1/2))):
              if num%i==0:
                  return False
          return True
      

      然后,只需替换

      if num > 1:
          for i in range(2,num):
              if (num % i) == 0:
                  break
              else:
                  prime.append(num)
                  break
      

      与,

      if num>1:
         if is_prime(num):
            prime.append(num)
      

      【讨论】:

        【解决方案3】:

        您的问题是您不需要等待所有除法检查将数字附加到素数列表:

                    if (num % i) == 0:
                        break
                    else:
                        prime.append(num)
                        break
        

        您的代码的修复:

                is_prime =True
                for i in range(2,num):
                    if num % i == 0:
                        is_prime = False
                        break
        
                if is_prime:
                    prime.append(num)
        

        $ python prime_test.py 
        This code will count how many prime number exist in a certain range
        Enter lower range: 12
        Enter upper range: 20
        [13, 17, 19]
        ('There are', 3, 'prime number between', 12, 'and', 20)
        

        【讨论】:

        • 要成为素数,所有模数 num % i 不应为零。 2%2==0。
        【解决方案4】:

        这是从列表中获取素数的解决方案。询问用户应创建质数之间的范围并将其存储在list

        list4=list(range(3,10,1))  
        prime_num=[x for x in list4 if x%2!=0 and x%3!=0]
        

        【讨论】:

          猜你喜欢
          • 2017-05-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-23
          • 2021-04-24
          • 2013-11-27
          • 2022-11-14
          • 2019-01-08
          相关资源
          最近更新 更多