ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

洛谷P1865 A % B Problem(前缀和)

2022-01-16 22:00:26  阅读:192  来源: 互联网

标签:洛谷 P1865 int 个数 素数 区间 isprime Problem 前缀


原题链接

  • 题目大意:就原题的意思,求某个区间内素数和个数。

  • Tag:

  1. 前缀和
  2. 线性筛法
  • 思路:
    求某个区间内的和,第一个想到的是前缀和。与此同时,题目要求的是素数的个数,那么我们可以将线性筛法和前缀和同时进行。
    如果当前这个数是素数,那么我们将从第一个素数到当前这个下标数区间内的素数个数和加一,即
    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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有