繁体   English   中英

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

[英]Find prime numbers less than or equal to the number the user has entered with loops. How do I do that?

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

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")

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

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)

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

第一:要测试一个数是否为素数,您不需要检查除数之前的所有整数。 实际上,达到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)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM