标签:洛谷 P1865 int 个数 素数 区间 isprime Problem 前缀
-
题目大意:就原题的意思,求某个区间内素数和个数。
-
Tag:
- 前缀和
- 线性筛法
- 思路:
求某个区间内的和,第一个想到的是前缀和。与此同时,题目要求的是素数的个数,那么我们可以将线性筛法和前缀和同时进行。
如果当前这个数是素数,那么我们将从第一个素数到当前这个下标数区间内的素数个数和加一,即
s[i] = s[i- 1] + 1。
否则与上一个数保持一致,即
s[i] = s[i - 1]
- Code:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6 + 10;
int n, m, l, r;
bool isprime[N];
int s[N];//从第一个素数到当前这个下标数的区间内的素数个数和
void fun() {
memset(isprime, true, sizeof(isprime));
isprime[1] = false;
for(int i = 2; i <= m; i++) {
if(isprime[i]) {
for(int j = i * 2; j <= m; j += i)
isprime[j] = false;
s[i] = s[i - 1] + 1;//个数加一
}
else s[i] = s[i - 1];//个数不变
}
}
int main() {
scanf("%d%d", &n, &m);
fun();
for(int i = 0; i < n; i++) {
scanf("%d%d", &l, &r);
if(l < 1 || r > m) {//还有边界的哦
printf("Crossing the line\n");
continue;
}
printf("%d\n", s[r] - s[l - 1]);
}
return 0;
}
标签:洛谷,P1865,int,个数,素数,区间,isprime,Problem,前缀 来源: https://www.cnblogs.com/wush03/p/15811431.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。