[英]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.