【问题标题】:Find prime numbers less than or equal to the number the user has entered with loops. How do I do that?查找小于或等于用户使用循环输入的数的素数。我怎么做?
【发布时间】:2018-02-05 05:30:11
【问题描述】:

使用此代码,我只能测试用户输入的数字是否为质数。 如何在我的原始代码中添加另一个循环,以便找到所有小于或等于用户输入的数字的素数?

num = int(input("Enter a number: "))
if num > 1:
    prime = True
    for n in range(2, num):
        if (num % n) == 0:
            print ("Number", num, "is not prime")
            break
    else:
        print("Number", num, "is prime")

【问题讨论】:

标签: python


【解决方案1】:

您不能在一个循环中同时打印两者,您可以做一件事,在当前循环上方添加一个循环并像这样显示每个数字:

num = int(input("Enter a number: "))
if num > 1:
    prime = True
    for n in range(2, num):
        if (num % n) == 0:
            print ("Number", num, "is not prime")
            break
    else:
            print("Number", num, "is prime")

#your current code ends here

    for j in range(2, num + 1):
      # prime numbers are greater than 1
      for i in range(2, j):
          if (j % i) == 0:
              break
      else:
          print(j)

【讨论】:

    【解决方案2】:

    您的代码仅检查输入的数字是否为素数,但您质疑要获得从 2 到 n 的素数(n = 用户输入的数字),为此您在标志位的帮助下运行下面的代码,它将很少对你来说有点容易。希望对你有帮助。

    试试这个我运行这个代码它肯定会帮助你找到你的答案它在python 3.0或更高版本中工作

    num = int(input("Enter The Number"))
    if num > 1:
        num = num+1
        list = []
        for j in range (2,num,1):
            flag = 0
            for i in range (2,int(j/2)+1,1):
                if(j%i)== 0:
                    flag = 1
                    break
            if flag==0:
                list.append(j)
        print(list)  
    else:
        print("Enter Number Greater Than 1")
    

    【讨论】:

      【解决方案3】:

      除了小东西(未使用的布尔变量)之外,您的主要测试也非常低效。 让我们一步一步来。

      首先:要测试一个数是否为素数,您不需要检查除数之前的所有整数。实际上,上升到sqrt(num) 就足够了。我们可以编写一个单行函数来判断一个数是否为素数,如下所示:

      from numpy import sqrt
      
      def is_prime(n):
          return n > 1 and all(n%i for i in range(2,int(sqrt(n))+1))
      

      range(2,some_num) 给出了一个遍历从 2 到 some_num-1 的所有数字的迭代器,并且 all() 函数检查语句 n%i 在该迭代器中的所有位置是否为真,并返回一个布尔值。如果您可以保证永远不会通过偶数,则可以从 3 开始范围(当然会失去一般性)。即使您不想使用该功能,将功能分离到不同的功能中也会更简洁,因为在您输入的数字循环中,您可能必须单独检查每个数字是否为素数。

      第二:从这里,找到所有小于或等于输入的素数应该很容易。

      num = int(input("Enter a number:"))
      assert num>0, "Please provide a positive integer" # stops with an assertion error if num<=0
      prime_lst = [2] if num > 1 else [] 
      for x in range(3,num+1,2):
          if is_prime(x):
              prime_lst.append(x)
      

      列表prime_lst 将包含您所追求的所有素数。我从 1 开始循环,这样我只能循环遍历奇数,偶数可以被 2 整除。所以这种方式没有一个数字可以被二整除。不幸的是,这需要我检查数字本身是否可能是 2,这是一个素数。根据双素数猜想,我们无法在不知道输入的情况下进一步简化这个范围。

      最后:如果您真的想在一个循环中找到素数,请将您的循环更改为:

      prime_lst = [2] if num > 1 else []
      
      for x in range(3,num+1,2): # outer loop
          for i in range(3,int(sqrt(x))+1): # inner loop for check if x is prime
              if x%i == 0:
                  break # breaks the inner loop, number is not prime
          else:
              prime_lst.append(x)
      

      编辑:刚刚看到第二个答案here 有一个很好的解释(并且是一种更好的方法)编写单行代码来找出一个数字是否是素数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-20
        • 1970-01-01
        • 2016-04-12
        • 2014-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-24
        相关资源
        最近更新 更多