[英]Python Prime Number for-else range
lower = int(input("from:"))
upper = int(input("to:"))
for num in range(lower,upper + 1):
if num > 1:
for i in range(2,num):
if (num % i) == 0:
break
else:
print(num)
為什么此代碼將“ 2”打印為質數? (是,但不應打印)
2%2 == 0,所以應該跳過它...
當num
為2時, range(2, num)
為空,因此if (num % i) == 0:
不執行檢查,並執行else
塊。
其他人已經注意到range(start,end)
代碼中的錯誤。 更正這一點,您的質數代碼可以重寫為:
lower = int(input("from:"))
upper = int(input("to:"))
for num in range(lower,upper + 1):
if num > 1:
for i in range(2,max(num,3)):
if (num % i) == 0:
break
else:
print(num)
這不是讓素數引起您注意的最快方法,每個可能的素數都必須針對每個較小的數進行除數測試。 取而代之的是向上計數並計算出較小數字的倍數要快得多。 這樣,我們只需要對每個可能的除數進行一次數學運算即可。
為了完整起見,這是一個可以有效產生素數的程序(使用Eratosthenes方法的篩子)。
#### INPUTS
lower = int(input("from:"))
upper = int(input("to:"))
### Code
n = upper
prime_booleans = [True for i in range(n+1)]
p = 2
while (p * p <= n):
# Is current number a prime, eliminate the numbers that are multiples of it
if (prime_booleans[p] == True):
for i in range(p * 2, n+1, p):
prime_booleans[i] = False
p += 1
# Print all prime numbers
for p in range(lower, n):
if prime_booleans[p]:
print p,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.