[英]How to count the number of prime numbers?
我正在嘗試將以下代碼的 output 存儲到列表中
lower = int(input("Enter the begining of the range: "))
upper = int(input("Enter the end of the range: "))
print("Prime numbers between", lower, "and", upper, "are:")
for num in range(lower, upper + 1):
if num > 1:
for i in range(2, num):
if (num % i) == 0:
break
else:
numlist = []
numlist.append(num)
print(numlist)
我期待 output 在列表[p1, p2, p3,...pn]
內。 但是,我最終得到以下結果:
Enter the begining of the range: 1
Enter the end of the range: 10
Prime numbers between 1 and 10 are:
[2]
[3]
[5]
[7]
這種方法是正確的還是有更好的方法來滿足要求? 我還嘗試添加一行代碼,讓用戶可以看到 (4) 個介於 1 和 10 之間的素數。
只需在頂部定義數組並在底部打印所有內容即可。
lower = int(input("Enter the begining of the range: "))
upper = int(input("Enter the end of the range: "))
print("Prime numbers between", lower, "and", upper, "are:")
numlist = [] #this line
for num in range(lower, upper + 1):
if num > 1:
for i in range(2, num):
if (num % i) == 0:
break
else:
numlist.append(num)
print(numlist) # and this line
為了使這個運行得更快,你應該使用Eratosthenes 的篩子。 它可以使用與數字范圍相對應的偏篩 bitmap 應用於數字范圍:
def primesInRange(a,b):
isPrime = [True]*(b-a+1) # partial sieve
if a < 2: isPrime[:2-a] = [False]*(2-a) # 0 and 1 are not primes
for p in (2,*range(3,int(b**0.5)+2,2)): # scan divisors up to √b
base = (p - a%p)%p + p*(p>=a) # first multiple in partial sieve
isPrime[base::p] = [False]*len(isPrime[base::p]) # flag non-primes
return [p for p,prime in enumerate(isPrime,a) if prime] # return primes
primes = primesInRange(150,200)
print(*primes)
# 151 157 163 167 173 179 181 191 193 197 199
print(len(primes))
# 11
print(len(primesInRange(100100000,100200000))) # speed challenge
# 5493
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.