簡體   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