其他分享
首页 > 其他分享> > 洛谷P1865 A % B Problem(前缀和)

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

作者:互联网

原题链接

  1. 前缀和
  2. 线性筛法
#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