题目描述
如果n和n+2都是素数,我们称其为孪生素数,比如3和5,5和7都是孪生素数。 给你一个区间[a,b],请问期间有多少对孪生素数?
输入
第一行是一个整数K(K≤ 10000),表示样例的个数。 以后每行一个样例,为两个整数,a和b,1≤a≤b≤5000000。
输出
每行输出一个样例的结果。
样例输入
5 1 3 1 10 1 100 1 1000 1 5000000样例输出
0 2 8 35 32463
解题思路: 这题和 1098-素数个数 这题大同小异,都是用 前缀和 的方法去解。
这次我们不用 欧拉筛 来判断素数,选用一个较为简单直观的方法——埃氏筛。 同样的筛完之后就开始打表得到 前缀和数组。
*注:为什么最后是 twins[b] - twins[a+1] (第25行),而不是 1098-素数个数 这题的 books[b] - books[a-1], 具体情况要具体思考,不能硬套公式。 a-2 与 a, a-1 与 a+1, 这些就算是孪生素数,但也不在 [ a , b] 这个区间范围内。是要排除掉的,所以要从 a 与 a + 2 算起。
AC代码:
#include <stdio.h>
const int MAXN = 5*1e6;
int k,a,b,cnt;
i

文章讲述了如何使用埃氏筛和前缀和技巧求解区间内孪生素数对的数量,涉及素数检测和排除边界条件。
最低0.47元/天 解锁文章
1820





