簡體   English   中英

Python Prime Number for-else范圍

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM