首页 > 其他 > 详细

LightOJ 1197 Help Hanzo(区间素数筛)

时间:2020-04-29 18:47:34      阅读:57      评论:0      收藏:0      [点我收藏+]

题目链接OvO

题目大意

??\(t\)个询问,每次问\([l,r]\)内有多少素数。

具体实现

??区间素数筛选的模板题,先提前筛出来一组素数,然后再用埃氏筛选法对区间进行筛选,需要注意的是炸\(int\)以及左区间为\(1\)的情况。

代码

const int maxn = 1e6+10;
int p[maxn], kase;
bool u[maxn], isp[maxn];
void pri() {
    for (int i = 2; i<maxn; ++i) {
        if (!u[i]) u[i] = p[++kase] = i;
        for (int j = 1; i*p[j]<maxn; ++j) {
            u[i*p[j]] = p[j];
            if (!(i%p[j])) break;
        }
    }
}
int main(void) {
    pri();
    int t, kase = 1;
    scanf("%d", &t);
    while(t--) {
        int l, r;
        scanf("%d%d", &l, &r);
        zero(isp);
		for (int i = 1; 1LL*p[i]*p[i] <= r; ++i)
			for (ll j = l/p[i]*p[i]; j <= r; j += p[i])
				if (j >= l && j > p[i]) isp[j-l] = true;
        int ans = 0;
        for (int i = l; i<=r; ++i)
            if (!isp[i-l]) ++ans;
        if (l==1) --ans; //如果是1开始的话没法被筛去,需要特判
        printf("Case %d: %d\n", kase++, ans);
    }
    return 0;
}

LightOJ 1197 Help Hanzo(区间素数筛)

原文:https://www.cnblogs.com/shuitiangong/p/12803840.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!