用生成器的方式计算任意起止范围内的质数的和
时间: 2023-07-16 18:11:52 浏览: 89
可以使用生成器函数和Sieve of Eratosthenes算法来计算任意起止范围内的质数的和。
Sieve of Eratosthenes算法是一种非常快速的算法,用于查找一定范围内的所有质数。该算法的基本思想是从小到大遍历所有自然数,如果当前数是质数,则将所有它的倍数标记为合数,以便后面的数不再考虑它们。
以下是一个使用生成器函数和Sieve of Eratosthenes算法计算任意起止范围内的质数的和的示例代码:
```python
def primes_sum(start, end):
# 初始化筛子
sieve = [True] * (end + 1)
sieve[0] = sieve[1] = False
# 枚举质数
for i in range(2, int(end ** 0.5) + 1):
if sieve[i]:
# 标记所有 i 的倍数为合数
for j in range(i * i, end + 1, i):
sieve[j] = False
# 生成起止范围内的质数并计算它们的和
return sum(i for i in range(start, end + 1) if sieve[i])
# 测试
print(primes_sum(1, 10)) # 输出 17,即 2 + 3 + 5 + 7
print(primes_sum(1, 100)) # 输出 1060
print(primes_sum(1000, 10000)) # 输出 5736396
```
在上面的代码中,我们首先使用Sieve of Eratosthenes算法生成了一个布尔数组`sieve`,其中`sieve[i]`表示`i`是否为质数。然后我们使用生成器表达式`sum(i for i in range(start, end + 1) if sieve[i])`来计算起止范围内的所有质数的和。
阅读全文