濮阳网站关键词,兰州今天的新消息,wordpress爱找主题,网站做编辑器题目描述 n是两个连续的奇素数的平均值#xff0c;且n不是素数#xff0c;那么我们称这样的数是内部素数。求区间[a,b]内内部素数的个数。比如#xff0c;前5个内部素数是4,6,9,12,15。 输入 第一行是样例数T(1≤T≤1000)。 每个样例一… 题目描述 n是两个连续的奇素数的平均值且n不是素数那么我们称这样的数是内部素数。求区间[a,b]内内部素数的个数。比如前5个内部素数是4,6,9,12,15。 输入 第一行是样例数T(1≤T≤1000)。 每个样例一行为三个整数a,b(1≤a≤b≤106)。 输出 每行输出一个样例的结果。 样例输入 5
1 10
1 100
1 1000
1 10000
1 100000样例输出 3
24
166
1228
9591 解题思路本题最大的毒点就是你如果就把最大数定为1e6那么你将永远找不到错在哪因为忘记考虑 一个小于1e6的数 一个大于1e6的数 除以 2还是可能 小于 1e6 的。 AC代码
#include stdio.hconst int MAXN 1e6500;
bool vis[MAXN]; // 筛选MAXN个素数
int prime[80000]; // 把素数依次存放在该数组中
int abQuJian[MAXN];void isPrime()
{for (int i 2; i MAXN; i ){if ( !vis[i])prime[prime[0]] i; // prime[0] -- 筛选出的素数个数for (int j 1; j prime[0] i MAXN/prime[j]; j ){vis[i*prime[j]] 1;if (i % prime[j] 0)break;}}
}void solve()
{for (int i 2; i prime[0]; i ){int n (prime[i]prime[i1])/2;abQuJian[n] 1;}for (int i 2; i MAXN; i )abQuJian[i] abQuJian[i-1];
}int main()
{isPrime(); // 欧拉筛solve(); // 前缀和int T,a,b;scanf(%d,T);while ( T --){scanf(%d %d,a,b);printf(%d\n,abQuJian[b]-abQuJian[a-1]);}
}