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