查找小于或等于用户使用循环输入的数字的素数。我怎么做?

时间:2018-02-05 05:30:12

标签: python

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

<canvas id="game_canvas" style="width:512px;height:512px;"></canvas>

3 个答案:

答案 0 :(得分:0)

你不能在一个循环中打印,你可以做一件事在当前循环上面添加一个循环并显示每个数字:

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)

答案 1 :(得分:0)

除了小事(未使用的布尔变量)之外,您的主要测试也是超级低效的。 让我们一步一步来看看。

首先:要测试数字是否为素数,您无需检查除数之前的所有整数。实际上,上升到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整除。不幸的是,这需要我检查数字本身是否为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有一个很好的解释(以及更好的方法)来编写单行代码以查明数字是否为素数。< / p>

答案 2 :(得分:0)

你的代码只检查输入的数字是否为素数,但你质疑是否要获得从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")