📌  相关文章
📜  给定范围L至R的双素数计数(1)

📅  最后修改于: 2023-12-03 15:11:40.629000             🧑  作者: Mango

给定范围L至R的双素数计数

介绍

双素数指的是两个相邻的素数。给定一个范围L至R,我们需要求出在这个范围内有多少个双素数。

为了方便起见,我们这里假定L,R均为正整数,且L <= R。

解法

我们可以利用素数筛的思想来解决这个问题。

首先,我们可以使用线性筛法(也称欧拉筛)预处理出所有小于等于R的素数。然后,我们在[L,R-1]的范围内枚举每一个数,并判断它和它的下一个数是否都是素数。如果是素数,则累加答案。

代码
def count_twin_primes(L, R):
    # 预处理小于等于R的素数
    is_prime = [True] * (R + 1)
    primes = []
    for i in range(2, R + 1):
        if is_prime[i]:
            primes.append(i)
        for j in primes:
            if i * j > R:
                break
            is_prime[i * j] = False
            if i % j == 0:
                break

    # 检查[L, R-1]范围内的双素数数量
    twin_prime_count = 0
    for x in range(L, R):
        if is_prime[x] and is_prime[x + 2]:
            twin_prime_count += 1

    return twin_prime_count
参考资料