📅  最后修改于: 2023-12-03 15:11:40.629000             🧑  作者: Mango
双素数指的是两个相邻的素数。给定一个范围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